Java 通配符用于导入包中的所有类&引用;它没有';t导入子包、字段或方法。”;这是什么意思?

Java 通配符用于导入包中的所有类&引用;它没有';t导入子包、字段或方法。”;这是什么意思?,java,java-8,Java,Java 8,在Sybex一书中,第1章第10页中的OCA Oracle认证助理Java SE 8程序员I-学习指南陈述了以下内容: *是匹配包中所有类的通配符。每一个 当java运行时,java.util包中的类可用于此程序 编辑它它不导入子包、字段或方法;信息技术 只导入类。(好的,现在只导入类,但是有一个 一种称为“静态导入”的特殊导入类型,用于导入其他 类型。您将在第4章中了解更多。) 我的天真理解是,由于类包含成员(字段和方法),因此暗示这些成员也将被导入。然而,根据本书作者的说法,情况似乎更为复杂

在Sybex一书中,第1章10页中的OCA Oracle认证助理Java SE 8程序员I-学习指南陈述了以下内容:

*是匹配包中所有类的通配符。每一个 当java运行时,java.util包中的类可用于此程序 编辑它它不导入子包、字段或方法;信息技术 只导入类。(好的,现在只导入类,但是有一个 一种称为“静态导入”的特殊导入类型,用于导入其他 类型。您将在第4章中了解更多。)

我的天真理解是,由于类包含成员(字段和方法),因此暗示这些成员也将被导入。然而,根据本书作者的说法,情况似乎更为复杂

如果您正在导入一个类,并且您没有访问该类成员的权限,那么导入该类有什么意义

导入该类有什么意义

假设您没有在
java.util
中导入类。如果要创建
地图
,请键入:

java.util.Map<String, Integer> myMap = new java.util.HashMap<>();
如果您正在导入一个类,并且您没有访问成员的权限 那一类的

导入与访问无关,它们都是为了可读性和方便性。您不必输入那么多,第二个声明更具可读性,但在这两种情况下都可以使用相同的
myMap
方法


书中提到的
静态导入
(从中):

静态导入声明类似于正常导入 宣言。其中,常规导入声明从中导入类 包装,允许在没有包装鉴定的情况下使用 静态导入声明从类中导入静态成员, 允许他们在没有等级资格的情况下使用

静态导入的一个好例子是在单元测试中使用
Mockito
。在没有任何导入的情况下,您可以验证某些行为,如:

org.mockito.Mockito.verify(mock, org.mockito.Mockito.never()).someMethod();
如果使用普通导入
import org.mockito.mockito

Mockito.verify(mock, Mockito.never()).someMethod();
使用static import
import static org.mockito.mockito.*您可以键入

verify(mock, never()).someMethod();
这里,即使不指定类(
Mockito
),也可以使用
verify
never
静态方法

如果您正在导入一个类,并且您没有访问该类成员的权限,那么导入该类有什么意义

假设您有一个包
com.ebony.maw.utils
,该包有一个类
MyUtilities
,该类有一个静态方法
findFizgigs()
。如果你说

import com.ebony.maw.utils.*;
你现在可以说

MyUtilities.findFizgigs("thingy-002");
不用说

com.ebony.maw.utils.MyUtilities.findFizgigs("thingy-002");
但你还是不能说

findFizgigs("thingy-002");

没有类名。这就是他们所说的导入类,而不是导入方法的意思。它只是意味着可以使用类名,而不必提供包名前缀。但是您仍然可以使用该方法——只需提供类名作为前缀。

它说“java.util包中的每个类都可用”,这意味着该类的简单名称可以充分使用它。它没有提到访问权限。导入不影响访问,只影响源代码中的名称。@EbonyMaw导入(静态或普通)仅适用于您。编译器将在任何地方使用完全限定的类名。然后对于java.lang.*您将在Integer.MAX_值和Long.MAX_值方面遇到问题。顺便说一句,对于类变量,对于实例变量,您使用新关键字AHH。。。这就是他们想说的!:)伟大的一步一步的解释!
findFizgigs("thingy-002");