06.11 【Thinking in Java】初始化

前言

隨著計算機革命的發展,“

不安全”的編程方式已逐漸成為編程代價高昂的主要原因之一。

初始化”與“清理”,對應一個對象的生命週期。C++中引入“構造器”的概念,在創建對象時被自動調用的特殊方法。JAVA中同樣採用這種特殊方法,並自動提供了“垃圾回收器”。

1、用構造器確保初始化

Java中“初始化”的動作,是由構造函數來完成的,他不會返回任何值,區別於返回void。構造函數的名字與類名完全相同,分為無參構造函數(通常叫做默認構造函數),有參構造函數。那麼他是如何調用的呢?在new一個對象時,將會為對象分配存儲空間,並調用相應的構造器。相當於Java在你創建對象時,幫助你自動調用了一個類似initialize的方法對對象進行初始化。確保在操作對象前,它已經被恰當的初始化了。

2、方法重載

在Java中,構造器是強制重載方法名的另一個原因。創建一個對象時,若想以不同的方法初始化,無參或者有參,那麼這裡就涉及到了

方法重載。儘管方法重載是構造器所必需的,他也可以應用於其他方法。儘管方法重載具有相同的名字,但是在每個重載的方法中都有一個獨一無二的參數類型列表(甚至參數類型順序不同依然可以區分方法,但不建議這麼做)。值得注意的是,根據返回方法區分方法重載是行不通的。下面一個很容易出錯的兩個場景:

兩個方法重載,參數類型分別為int,double。傳入的實參類型若有對應的形參類型時,會被正常調用。但是下面兩種情況呢?

(1)當傳入實參類型小於聲明中的形參類型時:實際數據類型會被自動提升。

(2)當傳入實參類型大於聲明中的形參類型時:需要將類型進行轉換,否則會報錯。

3、默認構造函數

何為默認構造函數在前面已經說明,這裡不再重複。值得注意一個問題,當類中並沒有構造器時,編譯器會自動幫你創建一個默認構造函數。但是當你已經定義了一個構造器(無論是否有參),編譯器則不會幫助你自動創建默認構造函數。

4、this關鍵字

三個用法:

(1)表示對“調用方法的那個對象”的引用

(2)將當前操作對象傳遞給其他方法,放到方法的參數位置,例如:

class Apple{

Apple getPeeled(){ return Peeler.peel(this); }

}//削平果的動作

(3)用於在構造器中調用構造器,這種情況this是可以帶參數的;值得注意的有幾點(1)不能在非構造方法中是this(args)的方式調用構造函數(2)在一個構造函數中使用this,只能調用一個構造函數,一個以上會報錯。

5、static關鍵字

static靜態方法就是沒有this的方法,某種意義上具有全局函數的語義,可以在沒有創建任何對象的情況下,僅僅通過類本身來調用靜態方法,所以他並不是“向對象發送消息”的方式來完成。static使用雖然可以避免內存分配開銷,但是,static修飾後在第一次加載分配內存(方法區)後,並不會釋放內存,知道程序結束。所以要避免出現大量static。

先就這些,明天再寫嘍


分享到:


相關文章: