1. 程式人生 > >Chapter5_初始化與清理_用構造器初始化

Chapter5_初始化與清理_用構造器初始化

需要 構造 相同 log 編譯 創建對象 rgs div 機制

  接下來進入第五章,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_初始化與清理_用構造器初始化