什么是 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 构造函数。

感谢阅读! 我很高兴它帮助您更多地了解了 Java。

回复 作者 ashleykoree 的评论

最后我了解了开源(免费下载)和付费下载之间的区别。
非常感谢

Leem

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

回复 作者 Leem 的评论

++ Seth。 好文章!

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

回复 作者 akritiko 的评论

这篇文章真的让我印象深刻。

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

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.