我已经开始学习java中的包。我了解了import关键字。现在我的疑问是当我们在java中导入任何类时正在导入的是.class文件还是.java文件。
2 回答
Java 文件中的 Animport
仅允许您通过短名称而不是完全限定名称来引用类。
因此,如果您使用一个名为的类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 类加载器会解析所有内容。