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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,