Java構造函數 是特殊的方法(沒有返回類型),使您可以在應用程式內部的其他類使用對象之前完全初始化對象狀態。Java中的構造方法是使用 關鍵字調用的。下麵讓我們更深入地瞭解構造函數。 1.什麼是java構造函數 構造函數是一種特殊的方法,類似於(沒有確切的方法)構造,它可以幫助程式員在對象可被應用 ...
Java構造函數是特殊的方法(沒有返回類型),使您可以在應用程式內部的其他類使用對象之前完全初始化對象狀態。Java中的構造方法是使用new
關鍵字調用的。
下麵讓我們更深入地瞭解構造函數。
1.什麼是java構造函數
構造函數是一種特殊的方法,類似於(沒有確切的方法)構造,它可以幫助程式員在對象可被應用程式中的其他對象使用之前編寫對象初始化代碼。
每當應用程式需要任何類的新實例時,JVM就會在堆內部分配一個記憶體區域。然後,JVM執行調用的構造函數(類可以具有多個構造函數)並初始化對象狀態。在構造函數內部,您可以訪問所有對象屬性,並將它們分配給它們的預設值或任何所需的值。
2.構造函數類型
2.1.預設構造函數(無參數構造函數)
如果程式員在類定義中不提供任何構造函數,則JVM在運行時為該類提供預設構造函數。
程式員還可以覆蓋類中的預設構造函數。讓我們看一下語法。
public class Employee
{
public Employee() {
}
}
在預設構造函數中,構造函數的名稱必須與類名稱匹配,並且不應具有任何參數。
2.2通過構造函數重載進行參數化構造函數
如上所述,一個類中可以有多個構造函數。這可以通過重載構造函數來實現。在構造函數重載中,您可以根據要求傳遞參數列表,即可以初始化類的數量。
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對象,即不使用名稱,僅使用名字以及同時使用名字和姓氏。
Employee employee1 = new Employee();
Employee employee2 = new Employee("Lokesh");
Employee employee3 = new Employee("Lokesh", "Gupta");
3.構造規則
在Java中創建構造函數的強制性規則很少。
- 構造函數名稱必須與類的名稱相同。
- 構造函數定義中不能有任何返回類型。
- 構造函數中不能有任何return語句。
- 構造函數可以由不同的參數重載。
如果要使用
super()
超類構造函數,則它必須是構造函數中的第一條語句。
4.構造器鏈接
在Java中,可以在構造函數內調用其他構造函數。就像方法調用一樣,但是沒有任何引用變數(顯然,實例已完全初始化)。
現在我們可以調用相同類或父類的構造函數。兩者使用不同的語法。
4.1調用同一個類的構造函數
要從同一類調用其他構造函數,請使用this關鍵字。例如,
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();
}
}
學習愉快!