java面向對象入門(3)-java構造方法

Java構造函數是特殊的方法(沒有返回類型),使您能夠在應用程序內部的其餘類使用對象以前徹底初始化對象狀態。Java中的構造方法是使用new關鍵字調用的。
下面讓咱們更深刻地瞭解構造函數。
java

1.什麼是java構造函數

構造函數是一種特殊的方法,相似於(沒有確切的方法)構造,它能夠幫助程序員在對象可被應用程序中的其餘對象使用以前編寫對象初始化代碼。
每當應用程序須要任何類的新實例時,JVM就會在堆內部分配一個內存區域。而後,JVM執行調用的構造函數(類能夠具備多個構造函數)並初始化對象狀態。在構造函數內部,您能夠訪問全部對象屬性,並將它們分配給它們的默認值或任何所需的值。
程序員

2.構造函數類型

2.1.默認構造函數(無參數構造函數)

若是程序員在類定義中不提供任何構造函數,則JVM在運行時爲該類提供默認構造函數。
程序員還能夠覆蓋類中的默認構造函數。讓咱們看一下語法。函數

public class Employee 
{   
    public Employee() {
         
    }
}

在默認構造函數中,構造函數的名稱必須與類名稱匹配,而且不該具備任何參數。
學習

2.2經過構造函數重載進行參數化構造函數

如上所述,一個類中能夠有多個構造函數。這能夠經過重載構造函數來實現。在構造函數重載中,您能夠根據要求傳遞參數列表,便可以初始化類的數量。this

public class Employee {
    private String firstName;
    private String lastName;
 
    public Employee() { //constructor 1
 
    }
 
    public Employee(String firstName) { //constructor 2
 
    }
 
    public Employee(String firstName, String lastName) { //constructor 3
 
    }
}

在上面的類中,咱們定義了3個構造函數來處理3種狀況–應用程序可能須要如何建立employee對象,即不使用名稱,僅使用名字以及同時使用名字和姓氏。code

Employee employee1 = new Employee();
Employee employee2 = new Employee("Lokesh");
Employee employee3 = new Employee("Lokesh", "Gupta");

3.構造規則

在Java中建立構造函數的強制性規則不多。對象

  1. 構造函數名稱必須與類的名稱相同。
  2. 構造函數定義中不能有任何返回類型。
  3. 構造函數中不能有任何return語句。
  4. 構造函數能夠由不一樣的參數重載。
  5. 若是要使用super()超類構造函數,則它必須是構造函數中的第一條語句。
    內存

    4.構造器連接

    在Java中,能夠在構造函數內調用其餘構造函數。就像方法調用同樣,可是沒有任何引用變量(顯然,實例已徹底初始化)。
    如今咱們能夠調用相同類或父類的構造函數。二者使用不一樣的語法。
    get

    4.1調用同一個類的構造函數

    要從同一類調用其餘構造函數,請使用this關鍵字。例如,it

public Employee() { 
     
}
 
public Employee(String firstName) { 
    this();     //calling default constructor
}
 
public Employee(String firstName, String lastName) {
    this(firstName);    //calling constructor with single argument of String type
}

4.2 調用超類構造函數

要從父類或父類調用構造函數,請使用super關鍵字。super關鍵字的用法與關鍵字類似this–惟一的區別是super引用超類和this當前實例。

public Employee() { 
    //refer to Object class constructor 
    //as it is parent class for every class
    super();    
}

5.私有構造方法

有時您想保護構造函數以避免被其餘類調用。總之,您但願沒有人可以建立該類的新實例。
爲何有人要那個?好吧,這是單例模式所必需的。在單例中,應用程序但願只有任何一個類的一個實例。
常見的單例類定義以下所示:

public class DemoSingleton implements Serializable 
{
    private static final long serialVersionUID = 1L;
  
    private DemoSingleton() {
        // private constructor
    }
  
    private static class DemoSingletonHolder {
        public static final DemoSingleton INSTANCE = new DemoSingleton();
    }
  
    public static DemoSingleton getInstance() {
        return DemoSingletonHolder.INSTANCE;
    }
  
    protected Object readResolve() {
        return getInstance();
    }
}

學習愉快!

更多精彩請關注

相關文章
相關標籤/搜索