使用实例变量访问静态变量

时间:2015-03-19 17:38:45

标签: java instance-variables static-variables

如果我试图增加一个数字的CRN,我认为这样做的正确方法是创建一个实例变量和一个静态变量

private int crn;
private static int nextCrn = 2015000;

然后增加它,只需在构造函数中将它们设置为相等并递增,

public Course() {
    crn = nextCrn++;
}

每次调用构造函数时,它都会将值2015000增加1。

对于这种混淆感到抱歉,我知道如果你只是递增静态变量,它将会编译,

即。 crn = crn++

操作的顺序并不令我困惑,但为什么我们首先需要实例变量来存储特定对象的CRN,如下面提到的评论者。为什么静态变量在没有实例变量的情况下每个对象只能有不同的CRN?

3 个答案:

答案 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