什么是 Java 构造函数?

构造函数是强大的编程组件。使用它们来释放 Java 的全部潜力。
193 位读者喜欢这篇文章。
GitHub launches Open Source Friday 

Opensource.com

Java 是(有争议地)开源、跨平台编程中无可争议的重量级选手。虽然有很多 优秀跨平台 框架,但很少有像 Java 那样统一和直接的。

当然,Java 也是一种相当复杂的语言,有其自身的细微之处和约定。关于 Java 最常见的问题之一与构造函数有关:它们是什么,有什么用途?

简而言之:构造函数是在 Java 中创建新对象时执行的操作。当您的 Java 应用程序创建您编写的类的实例时,它会检查构造函数。如果构造函数存在,Java 会在创建实例时运行构造函数中的代码。这在几句话中塞满了大量的技术术语,但当您在实践中看到它时,它会变得更清晰,因此请确保您已安装 Java 并准备好进行演示。

没有构造函数的生活

如果您正在编写 Java 代码,您已经在使用构造函数,即使您可能不知道。Java 中的所有类都有构造函数,因为即使您没有创建构造函数,Java 也会在代码编译时为您创建。但是,为了演示,请忽略 Java 提供的隐藏构造函数(因为默认构造函数不添加任何额外功能),并了解一下没有显式构造函数的生活。

假设您正在编写一个简单的 Java 掷骰子应用程序,因为您想要为游戏生成一个伪随机数。

首先,您可以创建骰子类来表示物理骰子。考虑到您经常玩龙与地下城,您决定创建一个 20 面骰子。在此示例代码中,变量 dice 是整数 20,表示最大可能的骰子点数(20 面骰子不能掷出超过 20 的点数)。变量 roll 是最终将成为随机数的占位符,而 rand 用作随机种子。

import java.util.Random;

public class DiceRoller {
  private int dice = 20;
  private int roll;
  private Random rand = new Random();

接下来,在 DiceRoller 类中创建一个函数,以执行计算机模拟掷骰子必须采取的步骤:从 rand 中取一个整数并将其分配给 roll 变量,加 1 以解释 Java 从 0 开始计数但 20 面骰子没有 0 值的事实,然后打印结果。

public void Roller() {
	roll = rand.nextInt(dice);
	roll += 1;
	System.out.println (roll);
}

最后,生成 DiceRoller 类的实例并调用其主要函数 Roller

 // main loop
 public static void main (String[] args) {
	 System.out.printf("You rolled a ");

	 DiceRoller App = new DiceRoller();
	 App.Roller();
 }
}

只要您安装了 Java 开发环境(例如 OpenJDK),您就可以从终端运行您的应用程序

$ java dice.java
   You rolled a 12

在此示例中,没有显式构造函数。这是一个完全有效且合法的 Java 应用程序,但它有点局限性。例如,如果您将龙与地下城游戏放在一边,晚上玩一些 Yahtzee,您将需要 6 面骰子。在这个简单的示例中,更改代码不会有太多麻烦,但这在复杂的代码中不是一个现实的选择。您可以解决此问题的一种方法是使用构造函数。

构造函数的实际应用

此示例项目中的 DiceRoller 类代表一个虚拟骰子工厂:当调用它时,它会创建一个虚拟骰子,然后“掷出”。但是,通过编写自定义构造函数,您可以使您的 Dice Roller 应用程序询问您想要模拟哪种骰子。

大多数代码都是相同的,除了一个接受一定面数的构造函数。这个数字尚不存在,但稍后会创建。

import java.util.Random;

public class DiceRoller {
	private int dice;  
	private int roll;
	private Random rand = new Random();

  // constructor 
  public DiceRoller(int sides) {
	dice = sides; 
  }

模拟掷骰子的函数保持不变

public void Roller() {
	roll = rand.nextInt(dice);
	roll += 1;
	System.out.println (roll);
}

主代码块提供您在运行应用程序时提供的任何参数。如果这是一个复杂的应用程序,您将仔细解析参数并检查意外结果,但对于此示例,采取的唯一预防措施是将参数字符串转换为整数类型

 public static void main (String[] args) {
	 System.out.printf("You rolled a ");
	 DiceRoller App = new DiceRoller( Integer.parseInt(args[0]) );
	 App.Roller();
 }
}

启动应用程序并提供您希望骰子拥有的面数

$ java dice.java 20
    You rolled a 10
    $ java dice.java 6
    You rolled a 2
    $ java dice.java 100
    You rolled a 44

构造函数已接受您的输入,因此当创建类实例时,它会使用设置为用户指定的任何数字的 sides 变量创建。

构造函数是强大的编程组件。练习使用它们来释放 Java 的全部潜力。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时工作。

8 条评论

这是一篇关于 java 的好文章。我从这篇文章中了解了 java 构造函数。我学习了如何在 java 语言中使用 java 构造函数。

终于让我了解了开源(免费下载)和付费软件之间的区别。
非常感谢

Leem

太棒了!我很高兴听到您从一篇关于 java 构造函数的文章中提取了这些内容。感谢阅读!

回复 作者 Leem

++ Seth。很棒的文章!

感谢阅读这篇文章!我认为解释编程中奇怪的小细节可能很重要。作为一名自学成才的程序员,我可以证明这些是人们不知道自己不知道的事情。这些总是最难学的。

回复 作者 akritiko

这篇文章真的给我留下了深刻的印象。

关于 java 构造函数的优秀文章。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.