java執行過程,初始化的順序,建構函式,變數作用域,反射機制,面向物件的特徵
java是解釋性語言
執行過程:程式原始碼經過java編譯器編譯成位元組碼,然後由JVM解釋執行。
Java源程式經過編譯器編譯後變成位元組碼,位元組碼由虛擬機器解釋執行,虛擬機器將每一條要執行的位元組碼送給直譯器,直譯器將其翻譯成特定機器上的機器碼,然後在特定的機器上執行。
Java源程式 → java編譯器 (編譯) →
虛擬機器(解釋執行) → 直譯器(翻譯) →
機器碼
Java虛擬機器工作流程:裝載>連結>初始化>使用(包括例項化)
java初始化的順序
在java語言中,當例項化物件時,物件所在類的所有成員變數首先要進行初始化,只有當所有類成員完成初始化後,才能呼叫物件所在類的建構函式建立物件。
java程式初始化的工作可以在許多不同的程式碼塊中來完成,它們的執行順序如下:父類靜態變數,父類靜態程式碼塊,子類靜態變數,子類靜態程式碼塊,父類非靜態變數,父類非靜態程式碼塊,父類建構函式,子類非靜態變數,子類非靜態程式碼塊,子類建構函式。
建構函式:在物件例項化時初始化物件的成員變數 (1)建構函式必須與類名相同,且不能有返回值。 (2)每個類可以有多個建構函式。當開發者沒有提供建構函式時,編譯器在把原始碼編譯成位元組碼的過程中會提供一個沒有引數的預設的建構函式,如果開發者有提供建構函式,編譯器不會再建立預設建構函式。java中的作用域
在java語言中,變數的型別主要有三種:成員變數,靜態變數和區域性變數。
類的成員變數的作用範圍與類的例項化物件的作用範圍相同,當類被例項化時,成員變數就會在記憶體中分配空間並初始化,直到這個被例項化物件的生命週期結束時,成員變數的生命週期才結束。
被static修飾的成員變數被稱為靜態變數或全域性變數,與成員變數不同的是,靜態變數不依賴於特定的例項,而是被所有例項所共享,也就是說,只要一個類被載入,JVM就會給類的靜態變數分配儲存空間因此,就可以通過類名.變數名來訪問靜態變數。
區域性變數的作用域與可見性為它所在的花括號內。
成員變數的4種作用域:
作用域與可見性 : (其他package )public >(子類) protected>(同一package)default>(當前類)private
public static void main (String []args)為java程式入口方法,JVM在執行程式時會首先查詢main()方法。其中,public是許可權修飾符,表示任何類或物件都可以訪問這個方法,static表示main方法是一個靜態方法,即方法中的程式碼是儲存在靜態儲存區的,只要類被載入後,就可以使用該方法而不需要通過例項化物件來訪問,可以直接通過類名.main()直接訪問。必須保證main()方法的返回值為void,並有static與public關鍵字修飾,並且不能用abstract關鍵字修飾。
同一個.java檔案中可以有多個main()方法,但但只有與檔名相同且用public修飾的類中的main()方法才能作為整個程式的入口方法。
同一個.java檔案中可以有多個類,但是最多隻能有一個類被public修飾,且這個類的類名與檔名必須相同,若該檔案中沒有public的類,則檔名隨便試一個類的名字即可。