1. 程式人生 > >JAVA-構造器

JAVA-構造器

構造器

用於建立物件並初始化物件屬性的方法,叫“構造方法”,也叫“構造器”;構造器在類中定義。

  1. 構造器的名稱必須與類名同名,包括大小寫。
  2. 構造器沒有返回值,但也不能寫void,也不能寫return。
  3. 構造器的引數:一般是初始化物件的前提條件。
  4. 用new呼叫!且物件一建立,構造器就執行且僅執行一次。一般方法可被呼叫多次。
  5. 類一定有構造器!這是真的,不需要質疑!
  6. 如果類沒有宣告(定義)任何的構造器,Java編譯器會自動插入預設構造器!
  7. 預設構造是無引數,方法體是空的構造器,且預設構造器的訪問許可權隨著所屬類的訪問許可權變化而變化。如,若類被public修飾,則預設構造器也帶public修飾符。
  8. 預設構造器是看不到的,一旦自己寫上構造器則預設構造器就沒有了,自己寫的叫自定義構造器,即便自己寫的是空引數的構造器,也是自定義構造器,而不是預設構造器。
  9. 如果類聲明瞭構造器,Java編譯器將不再提供預設構造器。若沒手動寫出無參構造器,但卻呼叫了無參構造器,將會報錯!
  10. 構造器是可以過載的,過載的目的是為了使用方便,過載規則與方法過載規則相同。 
  11. 構造器是不能繼承的!雖說是叫構造方法,但實際上它不是常說的一般方法。 
  12. 子類繼承父類,那麼子型別構造器預設呼叫父型別的無引數構造器。
  13. 子類構造器一定要呼叫父類構造器,如果父類沒有無引數構造器,則必須使用super(有引數的),來呼叫父類有參的構造器。 那麼,為什麼子類一定要訪問父類的構造器?因為父類中的資料子類可以直接獲取。所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的,所以子類在物件初始化時,要先訪問一下父類中的構造器。總之,子類中至少會有一個構造器會訪問父類中的構造器,且子類中每一個建構函式內的第一行都有一句隱式super()。
  14. 注意事項:sper()、sper.和 this()、this.
  15. this:在執行期間,哪個物件在呼叫this所在的方法,this就代表哪個物件,隱含繫結到當前“這個物件”。
  16. super():呼叫父類無參構造器,一定在子類構造器第一行使用!如果沒有則是預設存在super()的!這是Java預設新增的super()。
  17. super.是訪問父類物件,父類物件的引用,與this.用法一致
  18. this():呼叫本類的其他構造器,按照引數呼叫構造器,必須在構造器中使用,必須在第一行使用,this() 與 super() 互斥,不能同時存在
  19. this.是訪問當前物件,本類物件的引用,在能區別例項變數和區域性變數時,this可省略,否則一定不能省!
  20. 如果子父類中出現非私有的同名成員變數時,子類要訪問本類中的變數用this. ;子類要訪問父類中的同名變數用super. 

eg:預設構造器

public class Demo {   
    public static void main(String[] args) {

          Foo foo = new Foo();//呼叫了javac自動新增的預設構造器!

          //Koo koo = new Koo();//編譯錯誤,沒有Koo()構造器

          Koo koo = new Koo(8);  
    }         
}
    class Foo { } //Foo有構造器,有無引數的預設構造器!
    class Koo {    
        public Koo(int a) {  //聲明瞭有引數構造器
               System.out.println("Call Koo(int)");  
        }       
    }