Java學習——類的載入、連線和初始化
-
JVM和類
當呼叫java命令執行某個java程式時,該命令將會啟動一個java虛擬機器程序,同一個JVM裡的所有執行緒、所有變數都處於同一個程序裡,他們都使用該JVM程序的記憶體區。
當系統出現以下幾種情況時,JVM程序將被終止。
->程式執行到最後正常結束。
->程式執行到使用System.exit()或Runtime.getRuntime().exit()處結束程式。
->程式執行過程中遇到未捕獲的異常或錯誤而結束。
->程式所在平臺強制結束了JVM程序。當java程式執行結束時,JVM程序結束,該程序在記憶體中的狀態將丟失。
定義一個包含類變數的類
public class Test{
//定義一個類變數
public static int a = 6;
}
定義一個類建立Test類的例項,並訪問類變數a
public class Test1{
public static void main(String [] args){
Test a = new Test();
a.a++;
System.out.println(a.a);
}
}
下面也建立Test物件,並訪問其類變數a的值
public class Test2{ public static void main(String [] args){ Test b = new Test(); System.out.println(b.a); } }
執行結果:
Text類裡的a成員變數是靜態變數,同一個類的所有例項的靜態變數共享同一塊記憶體區,執行Test1時改變了第一個Test例項的成員變數a,那麼第二個Test例項的成員變數a也將搜狐都愛影響,其實並不是這樣,因為兩次執行java程式處於兩個不同的JVM程序中,兩個JVM之間不會共享資料。
-
類的載入
類的載入指的是通過類載入器將類的class檔案讀入記憶體,併為之建立一個java.lang.Class物件。 -
類的連線
類被載入後,接著將會進入連線階段,連線階段負責把類的二進位制資料合併到jre中。類連線飛衛如下三個階段。
(1)驗證:檢驗被載入的類是否有正確的內部結構,並和其他類協調一致。
(2)準備:負責為類的類變數分配記憶體,並設定預設初始值。
(3)解析:將類的二進位制資料中的符號引用替換成直接引用。 -
類的初始化
主要對類變數進行初始化。對類變數指定初始值有兩種方式:
(1)宣告類變數時指定初始值;
(2)使用靜態初始化塊為類變數指定初始值。