Java -> 構造器(構造方法)


構造方法

  我們對封裝已經有了基本的了解,接下來我們來看一個新的問題,依然以Person為例,由於Person中的屬性都被private了,外界無法直接訪問屬性,必須對外提供相應的set和get方法。當創建人對象的時候,人對象一創建就要明確其姓名和年齡,那該怎么做呢?

構造方法介紹(構造器)

  在開發中經常需要在創建對象的同時明確對象的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性信息。

  那么,創建對象就要明確屬性值,那怎么解決呢?也就是在創建對象的時候就要做的事情,當使用new關鍵字創建對象時,怎么給對象的屬性初始化值呢?這  就要學習Java另外一門小技術,構造方法。

  那什么是構造方法呢?從字面上理解即為構建創造時用的方法,即就是對象創建時要執行的方法。既然是對象創建時要執行的方法,那么只要在new對象時,知道其執行的構造方法是什么,就可以在執行這個方法的時候給對象進行屬性賦值

  構造方法的格式:

    修飾符 構造方法名(參數列表)

    {

    }

  構造方法的體現:

  構造方法沒有返回值類型。也不需要寫返回值。因為它是為構建對象的,對象創建完,方法就執行結束

  構造方法名稱必須和類名保持一致

  構造方法沒有具體的返回值

  構造方法的代碼體現:

  class Person {

      // Person的成員屬性age和name

      private int age;

      private String name;

      // Person的構造方法,擁有參數列表

      Person(int a, String nm) {

          // 接受到創建對象時傳遞進來的值,將值賦給成員屬性

          age = a;

          name = nm;

      }

  }

默認構造方法和細節

  1.一個都沒有。默認添加無參構造

  2.一個以上,不默認添加無參構造需手動添加

  在沒有學習構造方法之前,我們也可以通過new關鍵字創建對象,並調用相應的方法,同時在描述事物時也沒有寫構造方法。這是為什么呢?

  在之前學習的過程中,描述事物時,並沒有顯示指定構造方法,當在編譯Java文件時,編譯器會自動給class文件中添加默認的構造方法。如果在描述類時,我們顯示指定了構造方法,那么,當在編譯Java源文件時,編譯器就不會再給class文件中添加默認構造方法。

  class  Person {

      //如果沒有顯示指定構造方法,編譯會在編譯時自動添加默認的構造方法

      //Person(){}  //空參數的默認構造方法

  }

  當在描述事物時,要不要在類中寫構造方法呢?這時要根據描述事物的特點來確定,當描述的事物在創建其對象時就要明確屬性的值,這時就需要在定義類的時候書寫帶參數的構造方法。若創建對象時不需要明確具體的數據,這時可以不用書寫構造方法(不書寫也有默認的構造方法)。

  構造方法的細節:

  1、一個類中可以有多個構造方法,多個構造方法是以重載的形式存在的

  2、構造方法是可以被private修飾的,作用:其他程序無法創建該類的對象。

  class Person {

      private int age;

      private String name;

      // 私有無參數的構造方法,即外界不能通過new Person();語句創建本類對象

      private Person() {

      }

      // 多個構造方法是以重載的形式存在

      Person(int a) {

          age = a;

      }

      Person(String nm, int a) {

          name = nm;

          age = a;

      }

  }

構造方法和一般方法區別

  到目前為止,學習兩種方法,分別為構造方法和一般方法,那么他們之間有什么異同呢?

  構造方法在對象創建時就執行了,而且只執行一次

  一般方法是在對象創建后,需要使用時才被對象調用,並可以被多次調用

  問題:

    有了構造方法之后可以對對象的屬性進行初始化,那么還需要對應的set和get方法嗎?

    需要相應的set和get方法,因為對象在創建之后需要修改和訪問相應的屬性值時,在這時只能通過set或者get方法來操作

    思考,如下代碼有問題嗎?

  class Person {

      void Person() {  //構造器沒有返回值

      }

  }

  class PersonDemo {

      public static void main(String[] args) {

          Person p = new Person();

      }

  }


免責聲明!

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



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