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

類加載的四個主要過程階段
- 驗證階段:檢驗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();
}
}