Java 中的私有建構函式

Rupam Yadav 2023年1月30日 2022年5月1日
  1. 在 Java 中定義私有建構函式
  2. 在 Java 中使用單例模式的私有建構函式
  3. 在 Java 中使用構建器模式的私有構造器
Java 中的私有建構函式

建構函式是類中最重要的部分之一,因為它是第一個執行的部分,它使我們能夠在類中的任何內容之前傳遞需要初始化的引數。

通常,我們建立一個帶有 public 修飾符的建構函式,以便可以在任何函式中建立物件,但是在某些情況下我們希望將其設為私有,這就是我們將在以下部分中看到的內容。

在 Java 中定義私有建構函式

在本節中,我們嘗試使用私有建構函式建立一個類的物件。

該程式有兩個類,ExampleClass2AnotherClassAnotherClass 有一個帶有私有修飾符和 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 中使用構建器模式的私有構造器

私有建構函式的另一個用例是我們在程式中使用構建器模式。我們在下面的程式碼中建立了一個具有三個類變數 firstNamelastNameageUser 類。

我們在建構函式中初始化所有這些變數並使建構函式私有。

我們還製作了一種列印值的方法。我們建立一個名為 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
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

相關文章 - Java Constructor