1. 程式人生 > >java執行過程,初始化的順序,建構函式,變數作用域,反射機制,面向物件的特徵

java執行過程,初始化的順序,建構函式,變數作用域,反射機制,面向物件的特徵

java是解釋性語言

執行過程:程式原始碼經過java編譯器編譯成位元組碼,然後由JVM解釋執行。

Java源程式經過編譯器編譯後變成位元組碼,位元組碼由虛擬機器解釋執行,虛擬機器將每一條要執行的位元組碼送給直譯器,直譯器將其翻譯成特定機器上的機器碼,然後在特定的機器上執行。

Java源程式 → java編譯器 (編譯) → 虛擬機器(解釋執行) → 直譯器(翻譯) → 機器碼

http://www.cnblogs.com/o-andy-o/archive/2012/04/11/2442109.html

Java虛擬機器工作流程:裝載>連結>初始化>使用(包括例項化)

java初始化的順序

在java語言中,當例項化物件時,物件所在類的所有成員變數首先要進行初始化,只有當所有類成員完成初始化後,才能呼叫物件所在類的建構函式建立物件。

java程式初始化的工作可以在許多不同的程式碼塊中來完成,它們的執行順序如下:父類靜態變數,父類靜態程式碼塊,子類靜態變數,子類靜態程式碼塊,父類非靜態變數,父類非靜態程式碼塊,父類建構函式,子類非靜態變數,子類非靜態程式碼塊,子類建構函式。

建構函式:在物件例項化時初始化物件的成員變數 (1)建構函式必須與類名相同,且不能有返回值。 (2)每個類可以有多個建構函式。當開發者沒有提供建構函式時,編譯器在把原始碼編譯成位元組碼的過程中會提供一個沒有引數的預設的建構函式,如果開發者有提供建構函式,編譯器不會再建立預設建構函式。
(3)建構函式可以有0個到多個引數。 (4)建構函式總是和new操作一起呼叫,且不能由程式編寫者直接呼叫,必須由系統在物件初始化時自動呼叫,且只執行一次。 (5)建構函式不能被繼承,所以不能被覆蓋,但是可以被過載 (6)子類可以通過super關鍵字來顯式呼叫父類的建構函式,當父類沒有提供無引數的建構函式時,子類的建構函式中必須顯示的呼叫父類的建構函式。如果父類提供了無引數的建構函式,此時子類的建構函式就可以不顯式的呼叫父類的建構函式,在這種情況下編譯器會預設呼叫父類提供的無引數的建構函式。當有父類時,在例項化物件時會先執行父類的建構函式,然後執行子類的建構函式。 (7)當父類和子類都沒有定義建構函式時,編譯器會為父類生成一個預設的無引數的建構函式,給子類也生成一個預設的無引數的建構函式。此外,預設構造器的修飾符只跟當前類的修飾符有關(例如:如果一個類被定義為public,那麼它的建構函式也是public)。

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的類,則檔名隨便試一個類的名字即可。

怎麼用命令提示符編譯java程式?http://jingyan.baidu.com/article/e73e26c0ce4e1624adb6a7ff.html

java在處理基本資料型別(如int,char,double)時,都是採用按值傳遞(傳遞的是輸入引數的複製)的方式執行,除此之外的其他型別都是按引用傳遞(傳遞的是物件的一個引用)的方式執行。物件除了在函式呼叫時時引用傳遞,在使用“=”複製時也採用引用傳遞。 java的反射機制 反射機制可以實現在執行時對類進行裝載,提供的功能有:得到一個物件所屬的類;獲取一個類所有的成員變數和方法;在執行時建立物件;在執行時呼叫物件的方法。 面向物件的特徵:抽象,繼承,封裝,多型。 繼承:子類至多隻能有一個父類,子類只能繼承父類的非私有(public與protected)成員變數和方法;            當子類定義的成員變數與父類定義的成員變數同名時,子類的成員變數會覆蓋父類的成員變數,而不會繼承;            當子類中的方法與父類的方法有相同的函式簽名(相同的方法名,參水個數與型別)時,子類將會覆蓋父類的            方法,而不會繼承。 多型:兩種表現形式:過載和覆蓋,編譯時多型通過方法的過載實現,執行時多型時通過方法的覆蓋(子類覆蓋父類方法)實現的。            過載是指同一個類中有多個同名的方法,但這些方法有不同的引數,所以在編譯時就可以確定到底呼叫哪個方法,是一種編譯時多型。            覆蓋:子類可以覆蓋父類的方法   Base b=new Derived();  呼叫Base類的建構函式,實際建立的是Derived類的物件。https://zhidao.baidu.com/question/1957728722095175660.html Java基礎篇1.談談你對java的認識(java的特性)2.抽象類與介面http://blog.csdn.net/liufeng_king/article/details/12970621