天天看點

第六章,類再生

6.0.1 初始化基礎類:

         初始化知識點1:通過此類的Art,Drawing,Cartoon三個程式例子的示範,可以看出,建構是在基礎類的“外部”進行的,是以基礎類會在衍生類通路它之前得到正确的初始化。即使沒有為Cartoon()建立一個建構器,編譯器也會為我們自動合成一個預設建構器,并發出對基礎類建構器的調用.但是注意這裡自動調用的是預設構造器,如果構造器裡面帶上自定義參數,就不能使用此方法,如果沒有預設構造器,就必須使用super(xx)來顯示調用基礎類構造器.

6.8.1 final資料

         許多程式設計語言都有自己的辦法告訴編譯器某個資料時“常數”。常數主要應用于下述兩個方面:

         ⑴.編譯期常數,它永遠不會改變。

         ⑵.在運作期初始化的一個值,我們不希望它發生變化。

         對于編譯器的常數,編譯器(程式)可将常數“封裝”到需要的計算過程裡。也就是說,計算可在編譯器間提前執行,進而節省運作時的一些開銷。在Java中,這些形式的常數必須屬于基本資料類型(Primitives),而且要用final關鍵字進行表達。在對這樣的一個常數進行定義的時候,必須給出一個值。

         無論static還是final字段,都隻能存儲一個資料,而且不得改變。

         若随同對象句柄使用final,而不是基本資料類型,它的涵義就稍微讓人有點兒迷糊了。對于基本資料類型,final會将值變成一個常數;但對于對象句柄,final會将句柄變成一個常數。進行聲明時,必須救将句柄初始化到一個具體的對象。而且永遠不能将句柄變成指向另一個對象。然而,對象本身是可以修改的。Java對此未提供任何手段,可将一個對象直接變成一個常數(但是,我們可自己編寫一個類,使其中的對象具有“常數”效果)。這一限制也适用于數組,它也屬于對象。

        fnail方法主要有兩點作用:(1)防止繼承類修改方法,(2)提高效率,前提是方法代碼量較少。還有類中的private方法由于不能被通路,會被編譯器自動加上final關鍵字,當然如果也可以主動加final,但是無任何額外意義.

final類,不允許被繼承.

        結論:final的字段或值隻能被一次指派,定義的時候,可以定義空的final,但是使用之前必須先指派,一次指派後,不能再更改final的值了。