java中的構造器


構造器是什么

1.構造器,也稱構造方法、構造函數。作用是構造出來一個類的實例,確保對象得到初始化
2.構造器的格式: 權限修飾符 類名(無參/有參){}
3.根據有無參數,可分為無參構造有參構造

構造器的特性

1.與一般方法名不同的是,構造方法名必須和類名保持一致,並且沒有返回值。
2.Java編譯器會自動創建無參構造函數,因此在類中,無參構造即使沒有,我們也可省略不寫。實例化對象時無需賦值。
3.倘若類中已存在有參構造函數,則編譯器不再提供默認無參構造。實例化對象時需賦值,不然報錯。
4.當類實例化一個對象時會自動調用構造方法。

示例代碼一:無參構造

學生類
public class Student { 
   //權限修飾符是public,表示內部屬性能被其他類訪問到。若使用private,則需要set/get才能訪問
   public String name;
   public int age;
   
   //無參構造,編譯器自帶,可不寫。
   public Student(){
       System.out.println("括號內無參數,這就是無參構造");
   }
}
測試類
public class Test  {
    public static void main(String[] args)  {
        Student st = new Student();//創建對象,括號內無需賦值
        //沒賦值的情況下,字符類型默認值為null,數值類型默認值為0
        System.out.println(st.name+" "+st.age);//null,0

        //對屬性進行賦值
        st.name="Tom貓";
        st.age=5;
        System.out.println(st.name+"今年"+st.age+"歲了");
    }
}
結果
括號內無參數,這就是無參構造
null 0
Tom貓今年5歲了

示例代碼二:有參構造

學生類
public class Student {
   //權限修飾符是public,表示內部屬性能被其他類訪問到。若使用private,則需要set/get才能訪問
   public String name;
   public int age;

   //無參構造最好也寫上
   public Student(){
       
   } 
   public Student(String name,int age){
       System.out.println("括號內有參數,就是有參構造");
       //將形參變量的值,賦給成員變量。
       this.name = name;
       this.age = age;
     //this.name = "吳邪"  若直接在構造方法內部賦值,則優先執行其內部的值,即吳邪會替掉Tom貓
    
   }
}
測試類
public class Test  {
    public static void main(String[] args)  {
        //創建對象。賦值后,定義的值會傳遞給構造器中的形參變量。
        Student st = new Student("Tom貓",5);//創建對象,須在括號內賦值,不然報錯
        //使用對象調用成員變量(java對象只能調用成員變量)
        System.out.println(st.name+"今年 "+st.age+"歲了");
    }
}

結果
括號內有參數,就是有參構造
Tom貓今年5歲了

補充

如果你創造了一個帶有參數的構造方法,那么無參的構造方法必須顯式的寫出來,否則會編譯失敗。這句話該如何理解?

這句話其實有點不妥,應該這么理解:每個類至少要有一個構造函數。如果寫了一個有參構造,而沒有寫無參構造,也是可以的。不過,當你嘗試通過一個無參構造來new對象時,編譯器會報錯。因為找不到這個無參的構造函數。也就是說,當一個類你沒有寫構造函數時,編譯器會自動幫你創建一個無參構造。反之,若是寫了有參構造,卻想通過無參構造new對象,那么就需要將此無參構造寫出來。

java中,子類為什么會自動繼承父類的無參構造方法?

其實這句話本身就是錯誤的。因為構造函數不能繼承,只能被調用。 正確的說法應該是,Java中子類會自動調用父類的無參構造方法。那么,子類為什么會自動調用父類的無參構造方法呢?因為子類繼承父類,會繼承到父類中的數據,所以必須要看父類是如何對自己的數據進行初始化的。所以子類在進行對象初始化時,先調用父類的構造函數,這就是子類的實例化過程。子類在繼承父類時,如果沒有相同的帶參構造方法,那么他就需要在其構造方法中,明確的通過super()調用父類的帶參構造方法,否則構造不出父類,從而也構造不出他自己了。如果我們在父類中寫個不帶參數的構造方法,就可以不用實現父類的帶參構造方法了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM