構造器的深入瞭解

    有一段時間沒有看編程方面的書了,今天覆習了一下java方面的知識,發現很多知識之前都瞭解甚淺,今天就先總結一下關於java構造器方面的知識深入瞭解。

首先講一下什麼是構造器:

構造器是一個和類名相同但是無返回值的方法,它在一個類中的作用是創建實例時執行初始化,是創建對象的重要途徑。注:如果程序員沒有爲java類提供任何的構造器,系統會自動爲這個類提供無參數的構造器,相反,如果有自定義的構造器,系統就不再提供默認的構造器

1  創建實例時執行初始化

創建一個對象時,系統會對這個對象的Field進行默認初始化,把所有的基本類型的Field設爲0或false,所有引用類型的Filed設爲null,使用構造器可以顯示的改變Filed的初始值,,如:

    

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {
      
       ContructorTest ct = new ContructorTest("book",123333)
       System.out.printIn(ct.name);
       System.out.printIn(ct.count);
   }
}


2 構造器是創建java對象的重要途徑,但不是全部途徑

實際上,當程序員調用構造器時,系統會先爲該對象分配內存空間,併爲這個對象執行默認初始化,此時這個對象已經產生了,而且這些操作都是在構造器執行之前就完成了,也就是說在系統執行構造器的執行體之前,系統已經創建了一個對象,只是這個對象還沒被外部程序訪問,只能在該構造器中通過this來引用

再來說一下構造器的重載問題:

一個類中可以有多個構造器,如果用戶希望該類保留無參數的構造器,或者希望有多個初始化過程,則可以爲該類提供多個構造器,一個類有多個構造器就形成了構造器的重載,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {
       ContructorTest ct1 = new ContructorTest();
       ContructorTest ct2 = new ContructorTest("book",123333)
       System.out.printIn(ct1.name + "" +ct1.count);
       System.out.printIn(ct2.count + "" +ct2.count);
   }
}
系統通過new調用構造器時,會根據傳入的實例列表來決定調用哪個構造器。

當有多個構造器時,其中一個構造器A的執行體可能包含另一個構造器B的執行體B,當存在這種情況時,可在方法A中調用方法B,構造器不能被直接調用,必須使用new關鍵字來調用,但是在這裏如果使用new關鍵字就會重新創建一個對象,在這種情況下,可以使用this關鍵字來調用相應的構造器,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public double weight;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }
     public ContructorTest(String name,int count,double weight)
     {
     
        this(name,count);   //通過this直接調用上一個構造器的初始化代碼
        this.weight = weight;
      }
}
注意:使用this調用另一個重載的構造器只能在構造器中使用,而且必須作爲構造器執行體的第一條語句




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章