1. 程式人生 > >Java學習——類的載入、連線和初始化

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)使用靜態初始化塊為類變數指定初始值。