Java 中的私有建構函式
建構函式是類中最重要的部分之一,因為它是第一個執行的部分,它使我們能夠在類中的任何內容之前傳遞需要初始化的引數。
通常,我們建立一個帶有 public 修飾符的建構函式,以便可以在任何函式中建立物件,但是在某些情況下我們希望將其設為私有,這就是我們將在以下部分中看到的內容。
在 Java 中定義私有建構函式
在本節中,我們嘗試使用私有建構函式建立一個類的物件。
該程式有兩個類,ExampleClass2
和 AnotherClass
。AnotherClass
有一個帶有私有修飾符和 print
語句的建構函式。
當我們在 ExampleClass2
類中建立此類的物件時,我們會收到一條錯誤訊息,指出 AnotherClass
具有私有訪問許可權。
它限制了對建構函式的訪問,並且在某些方面很有用,我們將在本教程的下一部分中看到。
public class ExampleClass2 {
public static void main(String[] args) {
AnotherClass anotherClass = new AnotherClass();
}
}
class AnotherClass {
private AnotherClass() {
System.out.println("This is a private constructor.");
}
}
輸出:
java: AnotherClass() has private access in com.tutorial.AnotherClass
在 Java 中使用單例模式的私有建構函式
我們使用單例模式在整個程式中只建立一個類例項。由於幾乎可以從專案中的任何地方訪問公共建構函式,我們使用私有建構函式。
我們使用私有建構函式建立一個類 AnotherClass
,該建構函式在下面的程式中顯示一條訊息。我們需要一個返回類例項的函式,因此我們建立了一個名為 getInstance()
的函式,該函式是公共且靜態的,可以在不建立物件的情況下呼叫。
在 getInstance()
方法中,我們返回 new AnotherClass()
並將返回型別設定為 AnotherClass
。我們建立另一個函式來測試我們是否可以呼叫例項的方法。
現在我們呼叫返回 AnotherClass
例項的 getInstance()
函式,並使用該例項呼叫 dummyMethod()
。
public class ExampleClass2 {
public static void main(String[] args) {
AnotherClass anotherClass = AnotherClass.getInstance();
anotherClass.dummyMethod();
}
}
class AnotherClass {
private AnotherClass() {
System.out.println("This is a private constructor.");
}
public static AnotherClass getInstance() {
return new AnotherClass();
}
public void dummyMethod() {
System.out.println("This is just a dummy method");
}
}
輸出:
This is a private constructor.
This is just a dummy method
在 Java 中使用構建器模式的私有構造器
私有建構函式的另一個用例是我們在程式中使用構建器模式。我們在下面的程式碼中建立了一個具有三個類變數 firstName
、lastName
和 age
的 User
類。
我們在建構函式中初始化所有這些變數並使建構函式私有。
我們還製作了一種列印值的方法。我們建立一個名為 BuilderClass
的內部類來在 User
類中構建物件。
BuilderClass
是公共的,因為另一個類可以訪問它。
我們在 BuilderClass
類中建立三個變數來設定 User
類的變數。我們建立 setter 方法來設定值,然後將值返回 this
。
我們通過建立 buildObject()
方法返回帶有值的物件,該方法返回帶有已設定的新值的 User
物件。
現在在 ExampleClass2
類中,我們得到 BuilderClass()
類,因為它是公共的。然後,我們使用 UserBuilder
物件使用它的 setter 方法設定值,然後呼叫返回 User
物件的 buildObject()
方法。
我們通過呼叫 getUserDetails()
函式來列印這些值。
public class ExampleClass2 {
public static void main(String[] args) {
User.BuilderClass userBuilder = new User.BuilderClass();
User getUser = userBuilder.setFirstName("Micheal").setLastName("Fisk").setAge(26).buildObject();
getUser.getUserDetails();
}
}
class User {
private final String firstName;
private final String lastName;
private final int age;
private User(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public void getUserDetails() {
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("Age: " + age);
}
public static class BuilderClass {
private String firstName;
private String lastName;
private int age;
BuilderClass setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
BuilderClass setLastName(String lastName) {
this.lastName = lastName;
return this;
}
BuilderClass setAge(int age) {
this.age = age;
return this;
}
public User buildObject() {
return new User(firstName, lastName, age);
}
}
}
輸出:
First Name: Micheal
Last Name: Fisk
Age: 26
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn