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
相关文章
在 Java 中初始化布尔变量
发布时间:2023/11/15 浏览次数:83 分类:Java
-
本文介绍如何在 Java 中初始化布尔变量。在 Java 中,Boolean 是包装原始数据类型 boolean 类型的包装类。
使用 Java 中的 printf() 方法打印布尔值
发布时间:2023/11/15 浏览次数:92 分类:Java
-
本文介绍了在 Java 中打印布尔值的 printf() 方法。本文介绍了在 Java 中打印布尔值的 printf() 方法。Boolean 是 Java 中的一种数据类型,它包含 true 或 false 文字。
在 Java 中检查输入是否为整数
发布时间:2023/11/15 浏览次数:86 分类:Java
-
本文介绍了如何在 Java 中判断一个输入是否为整数。问题指出,我们需要检查 Java 语言中的输入是否为整数。使用 Java 中的 hasNextInt 方法检查输入是否为整数
在 Java 中比较两个整数
发布时间:2023/11/15 浏览次数:129 分类:Java
-
本文介绍如何在 Java 中比较两个整数。本文介绍了如何比较 Java 中的两个整数。要比较 Java 中的整数值,我们可以使用 equals() 方法或 ==(等于运算符)。
Java 中的整数除法
发布时间:2023/11/15 浏览次数:59 分类:Java
-
本文介绍了 Java 中整数除法是如何发生的。本文详细介绍了当我们将两个整数相除时内部会发生什么。在下面的 Java 代码中,有四个 Java 语句。每行根据彼此相除的数字打印不同的输出。
在 Java 中将 Boolean 转换为 Int
发布时间:2023/11/15 浏览次数:135 分类:Java
-
这篇文章讨论了如何在 Java 中将 boolean 转换为 int。本文介绍了如何在 Java 中将 boolean 转换为 int。你可以找到一些示例程序作为更好地理解该主题的指南。
在 Java 中将 Int 转换为 Float
发布时间:2023/11/15 浏览次数:113 分类:Java
-
本教程将演示如何在 java 中将整数转换为浮点数。浮点值表示 Java 中的小数点数。它是几乎所有编程语言中使用的基本数据类型之一。本文将演示如何在 Java 中将整数转换为浮点数。
在 Java 中创建无符号整数
发布时间:2023/11/15 浏览次数:181 分类:Java
-
本文介绍如何在 Java 中创建无符号整数。有符号整数作为正负值范围存储在数据库中,从 -1 到 -128。与此相反,无符号整数仅包含从 0 到 255 的大量正范围值,没有负值。
Java 中的 Long.MAX_VALUE
发布时间:2023/11/15 浏览次数:101 分类:Java
-
本教程演示了 Java 中的 Long.Max_Value。不同的数据类型在编程中具有不同的范围。当我们需要更广泛的范围时,通常会使用 long 数据类型,这最终会导致内存更大。