ClassLoader,类差异

时间:2013-11-09 04:53:42

标签: java class classloader

我读过很多关于类加载器和类的论坛,这可能是我犯的错误。我现在很困惑。

  1. ClassLoader何时实例化?

  2. 读取“当java源文件被编译为二进制类时,编译器会将一个字段插入到java类文件中。这是一个public static final字段类型为java.lang.Class的“类”。这是真的?那么为什么我们可以直接在我们的代码中访问.class而不编译?

  3. 任何其他有助于更好地理解这一点的有效信息?

2 个答案:

答案 0 :(得分:1)

  1. ClassLoader是您班级的容器。因此,当您需要加载类时手动创建它,或者JVM会在启动时自动创建它以加载您的应用程序。有一个类加载器的层次结构,所以它有点复杂,the article you quoted很好地涵盖了这个主题。

  2. 我害怕,不是。我认为作者意味着它可以被视为一个静态字段被注入一个类 - 这真的很有意义。我只是反编译了一个类:

  3. 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加载类文件时实例化!