在java中,有两种有效的 import 宣言:import java.lang.Math; import java.lang.Math.*; 在后者中,使用通配符。这种形式被称为进口见索即付申报,但它与前者有何不同?它是否也导入 java.lang.Math ?如果…怎么办 Math 如果是一个类型(例如,一个类),它的所有内部类都会被导入吗?
import
import java.lang.Math.*;
java.lang.Math
Math
uklbhaso1#
声明
import java.util.ArrayList.*;
导入arraylist的所有嵌套类,但不导入arraylist本身。由于arraylist没有任何(公共)嵌套类,因此该语句实际上什么也不做。但是,请考虑接口 Map ,它定义了嵌套类 Map.Entry . 如果我们写信
Map
Map.Entry
import java.util.Map.*;
在java文件的开头,我们可以编写 Entry<A,B> 而不是 Map.Entry<A,B> 引用此嵌套类。如果使用静态导入,导入类的成员通常最有意义。然后不导入嵌套类,而是导入静态方法和变量。例如,
Entry<A,B>
Map.Entry<A,B>
import static java.Math.*;
将从导入 Math 班级。然后可以使用 Math 通过写作来上课。 sin(x) 而不是 Math.sin(x) .
sin(x)
Math.sin(x)
cclgggtu2#
有了这份声明 import java.util.ArrayList.*; 将所有嵌套类导入到 ArrayList 班级。例如,如果还要导入方法和常量,请声明:
ArrayList
import static java.lang.Math.*;
然后你可以用常数 PI 在代码中,而不是通过 Math.PI ,以及方法 cos() 而不是 Math.cos() . 例如,你可以写:
PI
Math.PI
cos()
Math.cos()
double r = cos(PI * theta);
pobjuy323#
基本上数学是最后一门课,它没有更多的子课。两者之间没有区别 import java.lang.Math.* 以及 import java.lang.Math 两者是同一个。所以我真的不认为有必要在这里使用第一种进口。
import java.lang.Math.*
import java.lang.Math
n3h0vuf24#
只导入直接嵌套的类型。声明不是递归的。这适用于导入内部类的类型,也适用于静态导入(用于导入方法)。
import static a.b.c.FooBar.*;
2ul0zpep5#
文件规定:注意:另一种不太常见的导入形式允许您导入封闭类的公共嵌套类。例如,如果graphics.rectangle类包含有用的嵌套类,例如rectangle.doublewide和rectangle.square,则可以使用以下两条语句导入rectangle及其嵌套类。
import graphics.Rectangle; import graphics.Rectangle.*;
请注意,第二条import语句不会导入矩形。所以导入 import java.lang.Math.*; 不会导入 Math 班级。注意:您可能还想知道为什么将通配符与javaimport语句一起使用是不好的?
bkkx9g8r6#
import java.lang.Math.*; 这将导入在中声明的所有嵌套类 Math 班级 java.lang 包裹。对嵌套类的引用可以在没有外部类的情况下给出(例如。, Foo 为了 java.lang.Math.Foo ). import java.lang.Math; 这将导入 Math 班级 java.lang 包裹。对嵌套类的引用必须与外部类一起给出(例如。, Math.Foo ).
java.lang
Foo
java.lang.Math.Foo
import java.lang.Math;
Math.Foo
6条答案
按热度按时间uklbhaso1#
声明
导入arraylist的所有嵌套类,但不导入arraylist本身。由于arraylist没有任何(公共)嵌套类,因此该语句实际上什么也不做。
但是,请考虑接口
Map
,它定义了嵌套类Map.Entry
. 如果我们写信在java文件的开头,我们可以编写
Entry<A,B>
而不是Map.Entry<A,B>
引用此嵌套类。如果使用静态导入,导入类的成员通常最有意义。然后不导入嵌套类,而是导入静态方法和变量。例如,
将从导入
Math
班级。然后可以使用Math
通过写作来上课。sin(x)
而不是Math.sin(x)
.cclgggtu2#
有了这份声明
import java.util.ArrayList.*;
将所有嵌套类导入到ArrayList
班级。例如,如果还要导入方法和常量,请声明:
然后你可以用常数
PI
在代码中,而不是通过Math.PI
,以及方法cos()
而不是Math.cos()
. 例如,你可以写:pobjuy323#
基本上数学是最后一门课,它没有更多的子课。两者之间没有区别
import java.lang.Math.*
以及import java.lang.Math
两者是同一个。所以我真的不认为有必要在这里使用第一种进口。n3h0vuf24#
只导入直接嵌套的类型。声明不是递归的。
这适用于导入内部类的类型,也适用于静态导入(用于导入方法)。
2ul0zpep5#
文件规定:
注意:另一种不太常见的导入形式允许您导入封闭类的公共嵌套类。例如,如果graphics.rectangle类包含有用的嵌套类,例如rectangle.doublewide和rectangle.square,则可以使用以下两条语句导入rectangle及其嵌套类。
请注意,第二条import语句不会导入矩形。
所以导入
import java.lang.Math.*;
不会导入Math
班级。注意:您可能还想知道为什么将通配符与javaimport语句一起使用是不好的?
bkkx9g8r6#
import java.lang.Math.*;
这将导入在中声明的所有嵌套类Math
班级java.lang
包裹。对嵌套类的引用可以在没有外部类的情况下给出(例如。,Foo
为了java.lang.Math.Foo
).import java.lang.Math;
这将导入Math
班级java.lang
包裹。对嵌套类的引用必须与外部类一起给出(例如。,Math.Foo
).