天天看點

JVM類加載機制

public class A{
    public int age = getAge();
    public static B b;
    public static void main(){
       b = new B();

    }
    public int getAge(){
      return 1;
    }
  }

      
JVM類加載機制

類加載的四個主要過程階段

  • 驗證階段:檢驗class檔案是否符合jvm規範,防止被篡改
  • 準備階段:該階段

    age的值為0,b的值為null,(八種基本屬性值為0,引用類型值為Null),有static final修飾的會直接指派,例如:static final int x=10;則預設就是10

    相當于申明變量,隻是申請記憶體空間但是沒有将對應的值織入

  • 解析階段:這一階段的任務就是把常量池中的符号引用轉換為直接引用,說白了就是jvm會将所有的類或接口名、字段名、方法名轉換為具體的記憶體位址
  • 初始化階段:執行類的初始化代碼,getAge()方法就在該階段執行,另外靜态代碼塊也在該階段執行,如果該階段對象有父類的話會先執行父類的初始化代碼
package class08;

class Fu {

    static int a; //類變量
    int id;

    //靜态代碼塊
    static {
        a = 10;
        System.out.println("這是FU的靜态代碼塊" + a);
    }

    //構造代碼塊
    {
        id = 11;
        System.out.println("這是FU的構造代碼塊id:" + id);
    }

    Fu() {
        System.out.println("這是FU的無參構造函數");
    }

}
class Zi extends Fu{

    public Zi() {
        System.out.println("Zi的構造函數");
    }
    static{
        System.out.println("Zi的static代碼塊");
    }

    public static void main(String[] args) {
        Zi zi = new Zi();

    }
}
      
JVM類加載機制

繼續閱讀