类型按需导入声明导入什么?

yshpjwxd  于 2021-06-30  发布在  Java
关注(0)|答案(6)|浏览(246)

在java中,有两种有效的 import 宣言:
import java.lang.Math; import java.lang.Math.*; 在后者中,使用通配符。这种形式被称为进口见索即付申报,但它与前者有何不同?它是否也导入 java.lang.Math ?
如果…怎么办 Math 如果是一个类型(例如,一个类),它的所有内部类都会被导入吗?

uklbhaso

uklbhaso1#

声明

import java.util.ArrayList.*;

导入arraylist的所有嵌套类,但不导入arraylist本身。由于arraylist没有任何(公共)嵌套类,因此该语句实际上什么也不做。
但是,请考虑接口 Map ,它定义了嵌套类 Map.Entry . 如果我们写信

import java.util.Map.*;

在java文件的开头,我们可以编写 Entry<A,B> 而不是 Map.Entry<A,B> 引用此嵌套类。
如果使用静态导入,导入类的成员通常最有意义。然后不导入嵌套类,而是导入静态方法和变量。例如,

import static java.Math.*;

将从导入 Math 班级。然后可以使用 Math 通过写作来上课。 sin(x) 而不是 Math.sin(x) .

cclgggtu

cclgggtu2#

有了这份声明 import java.util.ArrayList.*; 将所有嵌套类导入到 ArrayList 班级。
例如,如果还要导入方法和常量,请声明:

import static java.lang.Math.*;

然后你可以用常数 PI 在代码中,而不是通过 Math.PI ,以及方法 cos() 而不是 Math.cos() . 例如,你可以写:

double r = cos(PI * theta);
pobjuy32

pobjuy323#

基本上数学是最后一门课,它没有更多的子课。两者之间没有区别 import java.lang.Math.* 以及 import java.lang.Math 两者是同一个。所以我真的不认为有必要在这里使用第一种进口。

n3h0vuf2

n3h0vuf24#

只导入直接嵌套的类型。声明不是递归的。
这适用于导入内部类的类型,也适用于静态导入(用于导入方法)。

import static a.b.c.FooBar.*;
2ul0zpep

2ul0zpep5#

文件规定:
注意:另一种不太常见的导入形式允许您导入封闭类的公共嵌套类。例如,如果graphics.rectangle类包含有用的嵌套类,例如rectangle.doublewide和rectangle.square,则可以使用以下两条语句导入rectangle及其嵌套类。

import graphics.Rectangle;

import graphics.Rectangle.*;

请注意,第二条import语句不会导入矩形。
所以导入 import java.lang.Math.*; 不会导入 Math 班级。
注意:您可能还想知道为什么将通配符与javaimport语句一起使用是不好的?

bkkx9g8r

bkkx9g8r6#

import java.lang.Math.*; 这将导入在中声明的所有嵌套类 Math 班级 java.lang 包裹。对嵌套类的引用可以在没有外部类的情况下给出(例如。, Foo 为了 java.lang.Math.Foo ). import java.lang.Math; 这将导入 Math 班级 java.lang 包裹。对嵌套类的引用必须与外部类一起给出(例如。, Math.Foo ).

相关问题