Chapter5_初始化與清理_用構造器初始化
接下來進入第五章,java中初始化和清理的問題,這是兩個涉及安全的重要命題。初始化的功能主要是為庫中的構件(或者說類中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止資源過分被垃圾占用的出現,為解決這些問題,java中提供了對構造器和垃圾清理器的支持,首先討論構造器的問題。
為了保證程序的安全性,java中采用了構造器的機制來保證初始化。第一個問題就是命名的問題,java中的構造器規定名稱必須和類名相同。這主要是出於如下的考慮,第一如果讓編程者自行命名,則可能會產生於其他任何方法名稱沖突的危險,第二,由於是編譯器自動調用的構造器方法,必須要能夠讓編譯器知道去調用哪一個方法。構造器一般分為兩類,一種是無參構造器,這種構造器不接受任何參數,另一種是可以接受參數的構造器。下面是定義這兩種構造器的例子。
1 class tree{ 2 int height; 3 tree(){ 4 System.out.println("無參數構造器"); 5 } 6 7 tree(int height){ 8 this.height = height; 9 System.out.println("帶參數構造器 " + height); 10 } 11 } 12 13 public class test { 14 public static void main(String[] args){15 tree t1 = new tree(); 16 tree t2 = new tree(10); 17 } 18 }
輸出:
1 無參數構造器 2 帶參數構造器 10
這一段代碼定義了一個簡單的類tree,並且創建了兩種同名但參數列表不同的構造器(一個不接受參數),我們可以從代碼和輸出對構造器的機制進行初步的分析。
(1)首先很容易看到,一個類是允許定義多個構造器方法的,編譯器會根據參數列表的不同決定具體調用哪一種方法,這關系到方法重載的話題。
(2)另外更加細心的話,可以發現構造器方法是沒有返回值的,這顯然和普通的方法有區別,普通的方法都是有返回值的,即使是返回值為空的方法(返回void),並且你可以讓它具體返回某一類型,但是構造器則不行,它本身沒有任何返回值。
(3)java中新對象的創建和構造器的調用時綁定在一起的,代碼中沒有對構造器的具體調用,但是用new方法創建對象時,明顯可以看到構造器被調用了。
(4)如果在編寫類的時候沒有寫構造器,編譯器會自動提供默認的無參構造器並且調用。但是如果寫了其他接受參數的構造器,編譯器不會幫你創建默認的無參構造器。
Chapter5_初始化與清理_用構造器初始化