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;
}

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

因为你设置两个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();
}

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