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