有人能清楚地解释一下在Java文件中使用import语句时到底发生了什么吗?如果我们添加更多的Java类,它会增加文件的大小吗?为什么不使用类加载器来实现相同的效果?导入的限制有哪些?
有人能清楚地解释一下在Java文件中使用import语句时到底发生了什么吗?如果我们添加更多的Java类,它会增加文件的大小吗?为什么不使用类加载器来实现相同的效果?导入的限制有哪些?
import
declarations(而非语句)本质上是源代码级别的一种简写方式:它允许您使用单个标识符(例如List
,min
)来引用类型或static
成员,而不是完全限定名称(例如java.util.List
,Math.min
)。
import
声明部分是源代码的编译时元素,在运行时没有存在。在JVM字节码中,类型名称始终是完全限定的,除非您在使用编写不良的编译器,否则二进制文件应该只包含实际使用的类型名称。
类加载器用于一个完全不同的概念,与import
特征毫无关系。
导入声明允许通过单个标识符的简单名称引用
static
成员或命名类型。如果没有使用适当的import
声明,引用另一个包中声明的类型或另一个类型的static
成员的唯一方法是使用完全限定名称。单类型导入声明通过提及其规范名称导入单个命名类型。
类型导入需求声明按需要导入命名类型或包的所有可访问类型。从未命名包导入类型是编译时错误。
单静态导入声明通过给出其规范名称导入一个类型的所有可访问的
static
成员。静态导入需求声明按需要导入命名类型的所有可访问
static
成员。
import
有关的问题关于 import
的语法角色:
import
? - 它是一个声明而不是一个语句关于导入所有类型和单个类型:
关于import static
:
与性能相关的问题:
包由类组成,而一个包内的类又由方法、变量等等组成。 一个类有一个完整名称,由包名和类名组成。如果你需要在代码中使用一个类,你需要给编译器这个类的完整名称。因此,你可以使用导入语句或者在代码中每次使用该类时输入完整限定名称。
例如,如果你需要在代码中使用 ArrayList
,你可以使用导入语句 import java.util.ArrayList;
而不是在每个需要 ArrayList 的地方都输入完整限定类名。
更详细信息请参见JLS。
import
语句告诉编译器:如果你在这个类中找不到一个函数,请查找导入列表。
这样,您就可以引用其他包中的函数,而无需将定义(如C(++) .h文件)复制到自己的包中。
import static
可以直接帮助解决方法。 - Joachim Sauer