1.Java類的初始化
- 只有在 Java類被第一次使用時,虛擬機才會對該Java類進行初始化。
- 初始化過程中靜態代碼塊和靜態域會按照書寫順序依次執行。
- 當訪問Java類或接口中的靜態域時,只有真正聲明這個域的類或接口會被初始化。如:在類A中聲明了靜態域value,類B繼承自類A。通過B.value可以直接訪問類A中聲明的靜態域value。雖然引用時使用的類B,但是由於value是在類A中聲明的,因此B.value只會初始化類A,類B不會被初始化。
/**
* @author lzzz
*
*/
public class J17101901 {
public static void main(String[] args) {
System.out.println(B.value);
/*
out:
A static
1
*/
}
}
class A {
static int value = 1;
static {
System.out.println("A static");
}
}
class B extends A {
static {
System.out.println("B static");
}
}
- 創建對象
- 調用類中的靜態方法
- 為類或接口中的靜態域賦值
- 訪問類或接口中聲明的靜態域
- 調用Class類和反射API
2.Java對象的創建於初始化
- 在實際創建對象之前分配內存空間。所需的內存空間大小取決於Java類及其父類和祖先類包含的所有實例域的數量和類型。
- 內存分配成功之后將所有實例域設為默認值。
- 調用構造方法,類的構造方法調用過程分成三步:第一步是調用父類的構造方法,沒有顯示定義將會調用默認構造方法。第二步是按照書寫順序初始化類中的實例域。第三步是執行類的構造方法中的相應代碼。
/**
* @author lzzz
*
*/
public class J17100805 {
static {
System.out.println("father static{}");
}
{
System.out.println("father {}");
}
private int id = print("father private int id");
private static int staticId = print("father private static int");
public static int print(String str) {
System.out.println(str);
return 1;
}
public static void main(String[] args) {
J17100805 j1 = new J17100805();
System.out.println("--------我在j1之后--------");
J17100805 j2 = new J17100805();
System.out.println("--------我在j2之后--------");
J17100805 j3 = new J17100805();
System.out.println("\n--------我是分割線--------\n");
System.out.println("--------我在jj1之后--------");
J171008051 jj2 = new J171008051();
System.out.println("--------我在jj2之后--------");
J171008051 jj3 = new J171008051();
/*
father static{}
father private static int
father {}
father private int id
--------我在j1之后--------
father {}
father private int id
--------我在j2之后--------
father {}
father private int id
--------我是分割線--------
--------我在jj1之后--------
child static{}
child private static int
father {}
father private int id
child {}
child private int id
--------我在jj2之后--------
father {}
father private int id
child {}
child private int id
*/
}
}
3.對象終止
- Java采用自動內存管理機制,對象回收工作由垃圾回收器自動完成。
- 如果一定要手動處理相關工作,Java提供了finalize方法。