類初始化和類的加載問題

JVM進程終止:

1.程序運行到最後正常終止

2.程序運行到使用System.exit()或Runtime.getRuntime().exit()

3.程序執行過程中遇到未捕獲的異常或錯誤而結束

4.程序所在的平坦強行終止JVM進程

看下面的程序

類A

public class A 
{
	public static int a =5;
}
先執行
public class Test1 
{
	public static void main(String[] args) 
	{
		A a = new A();
		a.a++;
		System.out.println(a.a);
	}
}
在執行
public class Test2 
{
	public static void main(String[] args) 
	{
		A b = new A();
		System.out.println(b.a);
	}
}


Test1的結果是6   Test2的結果是5

因爲兩次運行Java程序處於不同的JVM進程中  兩個JVM之間不會共享數據


加載類的幾種情況

1.從本地的文件系統來加載class文件

2.從Jar包中加載class文件

3.通過網絡加載class文件

4.把一個Java源文件動態編譯,並執行加載


類連接的三個階段

驗證  準備  解析


類的初始化

1.聲明靜態屬性時指定的初始值

2.使用靜態初始化快爲靜態屬性指定初始值

假如這個類還沒有被加載和連接,程序先加載並連接該類

假如該類的直接父類還沒有初始化,則先初始化其直接父類

假如類中有初始化語句則系統依次執行這些初始化語句

當程序主動使用任何一個類的時候,系統會保證該類以及所有的父類(包括直接父類和間接父類)都會被初始化


Java通過下面六種方式初始化類或者接口

1.創建類的實例,爲某個類創建實例的方式包括使用new操作符來創建實例,通過反射機制創建實例,通過反射方式來創建實例

2.調用某個類的靜態方法

3.訪問某個類或者接口的靜態屬性,或爲該靜態屬性賦值

4.使用反射方式來強制創建某個類或者接口對應的java.lang.class對象

5.初始化某個類的子類當程序主動使用任何一個類的時候,系統會保證該類以及所有的父類(包括直接父類和間接父類)都會被初始化

6.直接使用java.exe命令來運行某個主類,當運行某個主類時,程序會先初始化該主類




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章