迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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/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 数据类型,这最终会导致内存更大。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便