2 qq158876572 qq158876572 于 2016.03.24 10:58 提问

java类中有有参构造,没有无参构造

import java.util.Date;

public final class Schedule {
private final Date start;
private final Date end;

public Schedule(Date start, Date end) {
    if (start.compareTo(end) > 0)
        throw new IllegalArgumentException(start + " after " + end);
    this.start = start;
    this.end = end;
}

public Date getStart() {
    return start;
}

public Date getEnd() {
    return end;
}

}
类中有有参构造,应该手动添加无参构造,可添加后报错,不添加反而正常,求大神解释下为什么?

8个回答

sadwxds
sadwxds   2016.03.24 11:45
已采纳

因为你设置两个final的Date,又没有初始化它们.
当你提供了一个无参的构造函数,又没有初始化时,编译器就会报错.
比如改成这样
public Schedule(){
start = new Date();
end = new Date();
}

qq158876572
qq158876572 我光想着没有无参构造的事了,忘了final变量还没初始化了
2 年多之前 回复
sl_18500
sl_18500   2016.03.24 11:02

当有有参构造时,是没有无参构造方法的,去百度搜下构造方法呗

sadwxds
sadwxds 回复健秋: 2:当自己编写了有参构造时,不再提供默认的无参,但是可以自己编写无参构造.3:代码放到编译器中就什么都清楚了
2 年多之前 回复
sadwxds
sadwxds 1:类必然会有构造方法,只是编译器默认提供了无参构造方法
2 年多之前 回复
enpterexpress
enpterexpress   Rxr 2016.03.24 11:05

构造方法默认就是没有参数的

Fs_1994_h7
Fs_1994_h7   2016.03.24 11:12

当有有参构造器时默认的无参构造器可写可不写 ,但是调用的时候都可以调用.

qq158876572
qq158876572   2016.03.24 11:19

写了有参构造后,系统不自动添加无参构造,需要手动添加,可我手动添加无参构造后报错,不添加反而一切正常,类也可以正常使用,问一下是什么逻辑

qq158876572
qq158876572   2016.03.24 11:27

import java.util.Date;

public final class Schedule {
public Schedule() {
super();
}
private final Date start;
private final Date end;

public Schedule(Date start, Date end) {
    if (start.compareTo(end) > 0)
        throw new IllegalArgumentException(start + " after " + end);
    this.start = start;
    this.end = end;
}

public Date getStart() {
    return start;
}

public Date getEnd() {
    return end;
}

}
手动添加无参构造后,无参构造报错"The blank final field start may not have been initialized"

sadwxds
sadwxds   2016.03.24 11:45

因为你设置两个final的Date,又没有初始化它们.
当你提供了一个无参的构造函数,又没有初始化时,编译器就会报错.
比如改成这样
public Schedule(){
start = new Date();
end = new Date();
}

Dissle
Dissle   2016.03.24 11:46

自己蹂躏自己,玩的好嗨啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
CGLIB基于类创建动态代理要求类必须有无参构造器
一般在看错误堆栈信息时,我们应该从最后两个“Caused by”看起,如下就是。 这里一般都是根本原因的所在。 黄色的真心没看懂! 红色的意思大概是,无法创建“class com.springinaction.springidol.PoeticJuggler”这个CGLIB子类。 你会问,到底什么意思啊?别急,先让看看我做了什么操作才出现这个错误!   Caused by: org.s
父类不含无参构造方法子类构造方法必须显式调用
在继承关系下实例化子类的时候会先实例化其父类,然后再实例化子类。 也就是说在new一个子类的时候,其实是需要先把父类new出来的,如果父类中还有父类,那么就会逐层进行,从最顶层的父类先实例化,最后才到当前的子类。
继承小知识点:父类如果没有无参构造器会怎样?
如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢? 报错。 如何解决呢?   A:在父类中加一个无参构造方法 B:通过使用super关键字去显示的调用父类的带参构造方法 C:子类通过this去调用本类的其他构造方法 子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。
dubbo的函数返回类,含有有参构造函数时,必须写明一个无参构造函数
package com.foundersc.ifc.adviser.shop.model;import lombok.Data;import java.io.Serializable;@Data public class PageModel implements Serializable{ private String begin = "0"; private String end =
直接超类中必须有无参的构造函数
superclass: Client.javapublic class Client{ /*  public  Client(){         System.out.println("Hello!");   }  */  public Client(String str){          System.out.println("带参数的构造函数");   }  }子类的构造函数:
JAVA反射调用无参构造、有参构造、普通方法、成员操作
package com.man.test; import java.lang.reflect.Field; public class Hello { public static void main(String[] args) throws Exception { // String fieldName = "name" ; //要操作的成员 Class cls = Class.f
java有参的构造方法和无参的构造方法
一、无参构造方法 1、定义: 如果编写一个java程序时没有添加无参构造方法,那么编译器会自动添加无参构造方法; 但是如果编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法 所以,如果需要使用无参构造方法,一定要在类里面添加 2、举例:public void text1 { private String name; private int a
如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
/* 如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢? 报错。 如何解决呢? A:在父类中加一个无参构造方法 B:通过使用super关键字去显示的调用父类的带参构造方法 C:子类通过this去调用本类的其他构造方法 子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。 注意事项: this(...)或者super(...)必须出现在第一条语
[Java] Java反射为什么需要无参构造函数
Java反射为什么需要无参构造函数最近在学习Spring,Spring有个关键的技术就是IOC,即控制反转,其中用到得一个重要的技术就是反射,在学习的过程中发现如果不提供一个无参的构造函数程序会报错,查了一些资料后对Java反射为什么需要无参构造函数这一知识点进行记录。一般来说反射是这样实现的:Class class = Class.forName(className); Object object
继承中构造方法的注意事项——父类没有给出显式无参构造方法的情况
package basicjavaday08; /** * 如果父类没有给出无参构造方法,子类的构造方法会出错。解决方法如下: * 1.在父类中增加一个无参构造方法 * 2.在子类构造方法中通过super关键字显式的调用父类的带参构造方法 * @author gt.liu * time 2016年10月13日 下午5:01:24 * BasicJava basicjavaday08 In