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的全部潜力。
8 条评论