迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的私有构造函数

作者:迹忆客 最近更新:2023/11/13 浏览次数:

构造函数是类中最重要的部分之一,因为它是第一个执行的部分,它使我们能够在类中的任何内容之前传递需要初始化的参数。

通常,我们创建一个带有 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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便