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变量还没初始化了
一年多之前 回复
sl_18500
sl_18500   2016.03.24 11:02

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

sadwxds
sadwxds 回复健秋: 2:当自己编写了有参构造时,不再提供默认的无参,但是可以自己编写无参构造.3:代码放到编译器中就什么都清楚了
一年多之前 回复
sadwxds
sadwxds 1:类必然会有构造方法,只是编译器默认提供了无参构造方法
一年多之前 回复
enpterexpress
enpterexpress   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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!