我已经开始学习Java包了。我了解了导入关键字。现在我的疑问是,当我们在 java 中导入任何类时,它是.class文件还是正在导入的.java文件。
Java 文件中的import
只不过是允许您通过类的短名称而不是完全限定名来引用类。
因此,如果您使用名为some.package.CoolClass
的类,那么您可以在代码中的任何位置使用该全名,或者只是将import some.package.CoolClass;
放在顶部并在代码中CoolClass
调用它。
编译器需要能够加载您正在使用的类(无论您是否导入了它(,这意味着它要么需要找到该类的.class文件,要么同时编译.java文件(即,如果您有两个类A
并B
并同时编译它们,那么每个都可以引用另一个, 即使当时在技术上没有任何类文件(。
在运行时(即实际执行代码时(,您将需要类路径中使用的每个类的.class文件。(运行时不使用.java文件(。同样,是使用import
来使用短名称还是在代码中使用完全限定名称并不重要。
是否使用 .class 或 .java 文件进行导入?
答:.class文件,可能编译.java文件。
即使在以下情况下(当没有.class文件时(,这也有效:
// p/a/A.java
package p.a;
import p.b.B;
public class A {
public static final A DEFAULT_A = new B();
}
// p/b/B.java
package p.b;
import p.a.A;
public class B extends A {
}
可以处理这种(循环依赖(的原因是.class文件与.obj/.o对象文件相当:.class文件中有符号信息(类和方法名称(。正如目标文件通过链接器链接到可执行文件或库一样,java 类加载器会解析所有内容。