如果我试图增加一个数字的CRN,我认为这样做的正确方法是创建一个实例变量和一个静态变量
private int crn;
private static int nextCrn = 2015000;
然后增加它,只需在构造函数中将它们设置为相等并递增,
public Course() {
crn = nextCrn++;
}
每次调用构造函数时,它都会将值2015000增加1。
对于这种混淆感到抱歉,我知道如果你只是递增静态变量,它将会编译,
即。 crn = crn++
操作的顺序并不令我困惑,但为什么我们首先需要实例变量来存储特定对象的CRN,如下面提到的评论者。为什么静态变量在没有实例变量的情况下每个对象只能有不同的CRN?
答案 0 :(得分:1)
我假设每个实例应该获得不同的CRN,如果您只使用静态变量,它们将具有相同的CRN。静态变量用于跟踪下一个可用数字,而实例变量用于存储该特定对象的CRN。
当前对象可以访问它自己的实例变量,但是同一类的其他对象不能。同一类的所有对象都可以访问静态变量。静态变量由创建的所有对象使用以获取唯一编号,然后将其存储在该特定对象的实例变量中,该对象不能被同一类的其他对象访问。我希望这很有道理,找到合适的词语很难。
答案 1 :(得分:0)
操作顺序 - 后缀为done first and returns the original value。希望澄清。
答案 2 :(得分:0)
这不是令我困惑的操作顺序,但为什么我们这样做 首先需要实例变量来存储CRN 某些对象,如下面提到的评论者。为什么不能 静态变量只对每个没有的对象有一个不同的CRN 实例变量??
因为静态变量属于类,并且所有实例都可以访问,实例变量属于实例,并且每个对象实例都是唯一的,因此名称"实例变量"。
//nextCrn = 201500
Course c1 = new Course();
//nextCrn = 201501, c1.crn = 201500
Course c2 = new Course();
//nextCrn = 201502, c1.crn = 201500, c2.crn = 201501
Course c3 = new Course();
//nextCrn = 201503, c1.crn = 201500, c2.crn = 201501, c3.crn = 201502