在java中导入那个class时,我们是导入class的源代码还是字节码?

Whether we import source code or byte code of a class when importing that class in java?

我已经开始学习包 java.I 了解了导入 keyword.Now 我的疑问是它是 .class 文件还是正在导入的 .java 文件在我们导入 java 中的任何 class 时导入。

Java 文件中的 import 只不过允许您通过其简称而不是完全限定名称来引用 class。

因此,如果您使用名为 some.package.CoolClass 的 class,那么您可以在代码中的任何地方使用该全名,或者只需将 import some.package.CoolClass; 放在顶部并仅将其命名为 CoolClass 在你的代码中。

编译器需要能够加载您正在使用的 class(无论您是否导入它),这意味着它 要么 需要找到class 的 .class 文件也会同时编译 .java 文件(即如果你有两个 class es AB 并同时编译它们然后每个都可以引用另一个,即使从技术上讲当时没有它们的任何 class 文件)。

在运行时(即当您实际执行代码时),您将需要每个 class 的 .class 文件,您 class路径。 (.java 文件在运行时不使用)。同样,您是使用 import 来使用短名称还是在代码中使用完全限定名称都没有关系。

Does the compiler use .class or .java files for an import?

回答:.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 和.class 文件中的方法名称)。正如目标文件通过链接器链接到可执行文件或库一样,java class 加载程序解决了所有问题。