专栏首页Opensource翻译专栏什么是Java构造函数?【Programming】

什么是Java构造函数?【Programming】

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

图片来源:Opensource.com

在开放源代码,跨平台编程中,Java是(无可争议的)重量级人物。 尽管有许多出色的 跨平台 框架 ,但很少有像Java这样统一和直接的框架 。

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

简而言之:构造函数是在Java中创建新对象时执行的动作。 当Java应用程序创建您编写的类的实例时,它将检查构造函数。 如果存在构造函数,则Java在创建实例时在构造函数中运行代码。 很多技术术语都塞进了几句话,但是当您实际使用它时,它会变得更加清晰,所以请确保你已经安装了 Java 并准备好进行演示。

没有构造函数的例子

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

假设您要编写一个简单的Java掷骰子应用程序来生成一个伪随机数。

首先,您可以创建骰子类来表示物理骰子。 假设你玩了很多《龙与地下城》,决定创建一个20面骰子。 在这个示例代码中,可变骰子是整数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 中取一个整数并将其分配给骰子变量,加1以解释 Java 开始计数为0但20面骰子没有0值的事实,然后打印结果。

最后,生成一个 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应用程序询问希望模拟哪种类型的骰子。

大多数代码都是相同的,只是构造函数接受了sides。 这个数字现在还不存在,但是以后会创建出来。

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 的全部潜能。

原文链接:https://opensource.com/article/19/6/what-java-constructor

原文作者: Seth Kenlon (Red Hat)

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开始使用Eclipse Che IDE在云端进行开发【Programming】

    Eclipse Che在基于容器的云环境中为Java开发人员提供了Eclipse IDE。

    Potato
  • 使用Python和Scribus制作RGB立方体【Programming(Python)】

    使用Scribus的Python Scripter功能创建一个显示RGB色谱图的3D立方体。

    Potato
  • 学习Golang的4个技巧【Programming(Go)】

    我:“好。”(内部对话):“这是用Go语言编写的。那是什么?”(谷歌工作人员):“哦,一种编程语言。我在职业生涯中已经学到了一些。没那么难吧。”

    Potato
  • pytorch导入错误so: undef

    https://blog.csdn.net/qq_37674858/article/details/88870124

    py3study
  • OSPF中过滤3类LSA

    二:实验需求: 1:要求拒绝Area1的路由进入Area 0; 2:要求阻止Area2的路由泛洪到其它区域; 3:拒绝R2上的路由进入R4的路由表,其...

    py3study
  • 数据挖掘那些事

    统计学、数据挖掘与机器学习是近年来经常一起出现的3个词语,尤其是数据挖掘与机器学习。有些人认为数据挖掘涵盖了机器学习,有些人认为机器学习应该包含数据挖掘,各种说...

    黄成甲
  • 机器学习模型五花八门不知道怎么选?这份指南告诉你

    · 适用于在已有了一些预先定义好的变量并且需要一个简单的预测模型的情况下使用;

    AI科技大本营
  • 解惑rJava R与Java的高速通道

    目录 rJava介绍 rJava安装 rJava实现R调用Java rJava(JRI)实现Java调用R (win7) rJava(JRI)实现Java调用R...

    小莹莹
  • 网络工程师_思科 | 讲一下路由协议,顺便拓展一下OSPF高级部分

    IP地址---32bit--4Byte---点分十进制---192.168.1.1/24--192.168.1.1 255.255.255.0

    网络技术联盟站
  • C#实现Excel模板导出和从Excel导入数据

          午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 ? 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.O...

    用户1055830

扫码关注云+社区

领取腾讯云代金券