在准备JCA考试时,我刚刚看到了这个片段
import java.lang.String.*;
class EJava
{
String guru;
}
这当然是无意义的代码,因为默认情况下会导入java.lang。无论如何,作者想要使用它来表明这个代码不会编译,因为它使用了错误的导入语法。
但是代码确实可以编译。那么使用通配符的导入只能意味着两件事吗?
import somepackage.*; // import any type in the package somepackage
import somepackage.type.*; // import any member of this type (equivalent to : import somepackege.type;)
答案 0 :(得分:4)
这肯定会编译,但该语句将导入java.lang.String
类中的所有公共嵌套类,遗憾的是没有。
如此有效地说这句话毫无用处而且无害。编译应该没有问题。
如果您使用静态导入,则情况会有所不同,因为String
类中有许多静态方法。
答案 1 :(得分:3)
type-import-on-demand 声明允许所有可访问类型的a 根据需要导入的命名包或类型。
[...]
static-import-on-demand 声明允许所有可访问的静态 要根据需要导入命名类型的成员。
所以你的
import java.lang.String.*;
会导入String
中所有可访问的类型(Oracle JDK 8中没有可访问的类型)。 static
导入会导入所有可访问的static
成员,包含方法。