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命令來運行某個主類,當運行某個主類時,程序會先初始化該主類