美文网首页
简单讲讲类的加载机制

简单讲讲类的加载机制

作者: 探索的影子 | 来源:发表于2021-05-22 16:18 被阅读0次

    简单讲讲类的加载机制

    理论

    首先得说类的加载机制。从java文件从到内存里面经历了几个过程。

    1. 加载

      Java文件首先编译成class文件(字节码文件),通过io的方式读入文件。这个加载过程需要程序第一次使用的时候才会加载。如main方法,new对象等等。并且同时会生成一个Java.lang.Class的对象,作为方法区这个类的各种数据访问入口。

    2. 验证

      检验字节码文件是否合法。

    3. 准备

      给静态变量设置默认值,静态常量直接进行赋值。

    4. 解析

      将符号引用改为直接引用。如静态方法main会直接替换成内存所在的指针或者句柄等。这就是静态链接。动态链接是在程序的运行过程中将符号引用才替换成直接引用。

    5. 初始化

      根据程序员通过程序制定的主观计划去初始化类变量和其他资源。

      编译器收集的顺序是由语句在源文件中出现的顺序决定的,静态语句块中只能访问到定义在静态语句块之前的变量,而定义在它之后的变量,在前面的静态语句块可以赋值,但不能访问。

      private static String a = "默认值";
      
      static {
          a="新字符串";
          System.out.println(a);
      }
      

      这个打印是可以使用的。

      但是如下这部分代码就会发现编译器会提示error向前调用。Illegal forward reference

    static {
            a="新字符串";
            System.out.println(a);
        }
    
    private static String a = "默认值";
    
    image-20210522105528552

    初始化方法执行的顺序,虚拟机会保证在子类的初始化方法执行之前,父类的初始化方法已经执行完毕,因此在虚拟机中第一个被执行的类初始化方法一定是java.lang.Object。

    图例
    image-20210522115324605

    相关文章

      网友评论

          本文标题:简单讲讲类的加载机制

          本文链接:https://www.haomeiwen.com/subject/yotojltx.html