Java里,为什么在一个类中定义几个成员变量后,不能使其中一个成员变量等于其他几个成员变量之和?

自己定义的学生类,其中包括语文,数学,英语成绩,并定义mix(总分)等于前三者之和。

img

虽然编译器没报错,但实际运行过程中会出现mix还是0的结果。

img

这个问题,困扰我很久了,虽然最后用mixget方法解决了但这个困惑还是不清楚,求解答!
附代码:

public class studentDate implements Comparable {
    private String name;
    private int chinese;
    private int math;
    private int English;
    private int mix =chinese + math +English;

    public studentDate() {
    }
    public studentDate(String name, int chinese, int math, int english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        English = english;
        this.mix = chinese + math +english;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getChinese() {
        return chinese;
    }
    public void setChinese(int chinese) {
        this.chinese = chinese;
    }
    public int getMath() {
        return math;
    }
    public void setMath(int math) {
        this.math = math;
    }
    public int getEnglish() {
        return English;
    }
    public void setEnglish(int english) {
        English = english;
    }
    public int getMix() {
        return mix;
    }
    public void setMix() {
        this.mix = mix=this.chinese + this.math + this.English;
    }

    @Override
    public int compareTo(Object o) {
        int a = mix - this.mix;
        if (a != 0) {
            return a;
        } else {
            return a = 1;
        }
    }
}

定义的时候直接定义mix,把=及后面的删掉

单例模式你了解过吗。不能这样定义的,你要在方法里赋值或者放回给变量,

因为你在初始化的时候所有的基本类型都是0,导致了你第一次初始化的求和依然是0号,所以你后期给其他字段赋值的时候,并没有改变求和字段的值,可以的话可以学一下字节码指令,然后看一下编译后的字节码指令就大概能知道执行顺序了