Java 类装入器,类差异

Java 类装入器,类差异,java,class,classloader,Java,Class,Classloader,我读过很多关于类加载器和类的论坛,这可能是我犯的错误。我现在很困惑 类加载器什么时候被实例化 阅读“当java源文件被编译成二进制类时,编译器会在java类文件中插入一个字段。它是一个publicstaticfinal字段,名为java.lang.class”类型的“class”。这是真的吗?那么,我们怎么可以不编译就直接在代码中访问.class呢 是否有其他有效信息可以帮助您更好地理解这一点 ClassLoader是类的容器。所以,当您需要加载类时,您可以手动创建它,或者JVM会在启动时自动创

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

  • 类加载器什么时候被实例化

  • 阅读“当java源文件被编译成二进制类时,编译器会在java类文件中插入一个字段。它是一个
    public
    static
    final
    字段,名为
    java.lang.class
    ”类型的“class”。这是真的吗?那么,我们怎么可以不编译就直接在代码中访问.class呢

  • 是否有其他有效信息可以帮助您更好地理解这一点

  • ClassLoader
    是类的容器。所以,当您需要加载类时,您可以手动创建它,或者JVM会在启动时自动创建它来加载您的应用程序。有一个类装入器的层次结构,所以它有点复杂,并且很好地涵盖了这个主题

  • 恐怕不是。我认为作者的意思是它可以被看作是一个静态字段被注入到一个类中——这真的很有意义。我刚刚反编译了一个类:

  • 它没有该字段的字节或以下内容的跟踪:

    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
    }
    
    公共类bear.core.Role{
    public java.lang.String角色;
    public bear.core.Role();
    代码:
    0:aload_0
    1:invokespecial#1//方法java/lang/Object。“:()V
    4:返回
    }
    
    对于您的最后一个问题-现代IDE只知道有一个
    .class
    字段

    When does ClassLoader get instantiated?
    

    类加载器在编译后由JVM在链接之前加载类文件时实例化

    该死,这是两个问题。我知道2的答案,但我不知道1的答案。尽管如此,你仍然可以回答第二个问题!
    When does ClassLoader get instantiated?