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;
}
}
类中有有参构造,应该手动添加无参构造,可添加后报错,不添加反而正常,求大神解释下为什么?
因为你设置两个final的Date,又没有初始化它们.
当你提供了一个无参的构造函数,又没有初始化时,编译器就会报错.
比如改成这样
public Schedule(){
start = new Date();
end = new Date();
}
当有有参构造时,是没有无参构造方法的,去百度搜下构造方法呗
构造方法默认就是没有参数的
当有有参构造器时默认的无参构造器可写可不写 ,但是调用的时候都可以调用.
写了有参构造后,系统不自动添加无参构造,需要手动添加,可我手动添加无参构造后报错,不添加反而一切正常,类也可以正常使用,问一下是什么逻辑
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"
因为你设置两个final的Date,又没有初始化它们.
当你提供了一个无参的构造函数,又没有初始化时,编译器就会报错.
比如改成这样
public Schedule(){
start = new Date();
end = new Date();
}
自己蹂躏自己,玩的好嗨啊