微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 为什么还可以使用空白构造函数?

我最近正在阅读一些 Java并且遇到了一些新的东西(一个成语?)对我来说是新的:在程序中,具有多个构造函数的类也总是包含一个空白构造函数.例如:
public class Genotype {
  private boolean bits[];
  private int rating;
  private int length;
  private Random random;

  public Genotype() {              //  <= THIS is the bandit,this one right here
    random = new Random();
  }

  /* creates a Random genetoype */
  public Genotype(int length,Random r) {
    random = r;
    this.length = length;
    bits = new boolean[length];

    for(int i=0;i<length;i++) {
        bits[i] =random.nextBoolean();
    }
  }

  /* copy constructor */
  public Genotype(Genotype g,Random r) {
    random = r;
    bits = new boolean[g.length];
    rating = g.rating;
    length = g.length;

    for(int i=0;i<length;i++) {
        bits[i] = g.bits[i];
    }

  }
}

一个构造函数似乎不是一个“真正的”构造函数,似乎在每种情况下都会使用其他构造函数之一.那么为什么要定义构造函数呢?

解决方法

我不确定您所阅读的代码是否具有高质量(我过去曾审阅过一些生物信息学代码,但遗憾的是,这些代码通常不是由专业开发人员编写的).例如,第三个构造函数不是复制构造函数,并且通常在此代码中存在问题,因此我不会“过多地阅读它”.

一个构造函数认构造函数.它只初始化最低限度,并允许用户使用getter和setter设置其余部分.其他构造函数通常是“便利构造函数”,可帮助创建具有较少调用的对象.但是,这通常会导致构造函数间的不一致.实际上,最近的研究表明,认构造函数以及后续调用setter是更可取的.

在某些情况下,认构造函数也很重要.例如,某些框架(如digester(用于直接从XML创建对象))使用认构造函数. JavaBeans通常使用认构造函数等.

此外,某些类继承自其他类.当父对象的初始化“足够好”时,您可能会看到认构造函数.

在这种特定情况下,如果未定义该构造函数,则必须事先知道所有细节.这并不总是可取的.

最后,一些IDE会自动生成一个认构造函数,编写该类的人可能会害怕消除它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?