我读过很多关于类加载器和类的论坛,这可能是我犯的错误。我现在很困惑。
ClassLoader何时实例化?
读取“当java源文件被编译为二进制类时,编译器会将一个字段插入到java类文件中。这是一个public
static
final
字段类型为java.lang.Class
的“类”。这是真的?那么为什么我们可以直接在我们的代码中访问.class而不编译?
任何其他有助于更好地理解这一点的有效信息?
答案 0 :(得分:1)
ClassLoader
是您班级的容器。因此,当您需要加载类时手动创建它,或者JVM会在启动时自动创建它以加载您的应用程序。有一个类加载器的层次结构,所以它有点复杂,the article you quoted很好地涵盖了这个主题。
我害怕,不是。我认为作者意味着它可以被视为一个静态字段被注入一个类 - 这真的很有意义。我只是反编译了一个类:
public class Role {
public String role;
}
它在字节或字段中没有该字段的痕迹:
public class bear.core.Role {
public java.lang.String role;
public bear.core.Role();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
}
对于您的上一次qustion - 现代IDE只知道有.class
字段。
答案 1 :(得分:0)
When does ClassLoader get instantiated?
类加载器在链接之前编译后由JVM加载类文件时实例化!