Java學習(構造方法、this關鍵字、super應用)
構 造 方 法
定義:對象創建時使用的方法,即在new一個新對象時,對應構造方法,直接對屬性賦值。
語句格式: 修飾符(public 等) 構造方法名(必須跟當前類名一樣,否則報錯)(參數列表){
}
構造方法的體現:
(1)構造方法沒有返回值類型,也不需要返回值。因為它是為成員變量賦值,賦值結束,方法隨之執行結束。
(2)構造方法名稱必須與類名保持一致
(3)構造方法沒有具體的返回值
默認構造方法與細節:
默認構造方法:如果沒有顯示指定構造方法,編譯會在編譯時自動添加默認的構造方法,如果已經指定了構造方法,則不會再添加默認構造方法。
細節:
(1)一個類中可以有多個構造方法,多個重載方法是以重載的形式存在
(2)構造方法是可以被private修飾的,作用是其他類無法創建此方法的對象。
this關鍵詞
構造方法之間的調用,可以通過this關鍵詞來完成
構造方法調用格式:
this(參數列表);
成員變量和局部變量同名問題:
當在方法中出現了成員變量和局部變量重名的情況時,可以在成員變量前添加this.關鍵詞來區分。
Super關鍵字
子父類中構造方法的調用:
在創建子類對象時,父類的構造方法會先執行,因為子類中所有構造方法的第一行有默認的隱式super();語句。
格式:
調用本類中的構造方法 this(實參列表); 調用父類中的空參數構造方法 super(); 調用父類中的有參數構造方法super(實參列表);
當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參數構造方法。
子類對象創建過程的細節:
(1)只要是構造方法,第一行都有默認的super();
(2)Java中,定義了一個所有類的父類:opject
註意:
類中的構造方法默認第一行都有隱式的super()語句,在訪問父類中的空參數構造方法。所以父類的構造方法既可以給自己的對象初始化,也可以給自己的子類對象初始化。
如果默認的隱式super()語句在父類中沒有對應的構造方法,那麽必須在構造方法中通過this或者super的形式明確要調用的構造方法。
實例:
packagecom.oracel.demo01; public class Person { private int id; private String name; private int age; //系統會默認提供一個空參構造,當自己添加時會取消,若測試類中需要,需要自己手動添加 public Person(){ } //可以存在多個構造方法,以重載的形式存在
public Person(int id){
this.id=id;
} public Person(int id,String name,int age){ this(id); //使用this關鍵詞,調用構造方法this.name=name; //接收參數,並且賦值 this.age=age; //使用this.關鍵詞 來區分成員變量和局部變量 } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean compare(Person p){ return this.age==p.age; } }
測試類:
package com.oracel.demo01; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub //構造函數只能在創建對象(new)的時候賦值一次 //構造方法是給成員變量初始化的,但系統還是先賦默認值,然後再傳參 Person p=new Person(1,"寒武",18); System.out.println(p.getId()+"..."+p.getName()+"..."+p.getAge()); } }
Java學習(構造方法、this關鍵字、super應用)