加1,并与每一个创建的对象添加呢? [关闭](increments by 1 and add i

2019-08-02 21:25发布

class MyObject {

static int instanceCounter = 0;

static int counter = 0;

MyObject() {

instanceCounter++;

counter = counter + 1;

}

}

我使用的是静态的整数来获得这样的输出:

instanceCounter的值对于对象1:5

instanceCounter用于为MyObject的价值:5

计数器的值对象1:1

计数器的值对象2:2

计数器的值对象3:3

计数器的值对象的4:4

计数器的值对象5:5

但是它的显示

instanceCounter的值对于对象1:5

instanceCounter用于为MyObject的价值:5

计数器的值对于对象1:5

计数器的值为对象2:5

计数器的值对象3:5

计数器的值为对象4:5

计数器的值对象5:5

我的亚军类

class RunMyObject {

public static void main(String[] args) {

MyObject Object1 = new MyObject();

MyObject Object2 = new MyObject();

MyObject Object3 = new MyObject();

MyObject Object4 = new MyObject();


MyObject Object5 = new MyObject();

System.out.println(“Value of instanceCounter for Object 1: ” + Object1.instanceCounter);

System.out.println(“Value of instanceCounter for MyObject: ” + MyObject.instanceCounter);

System.out.println(“Value of Counter for Object 1: ” + Object1.counter);

System.out.println(“Value of Counter for Object 2: ” + Object2.counter);

System.out.println(“Value of Counter for Object 3: ” + Object3.counter);

System.out.println(“Value of Counter for Object 4: ” + Object4.counter);

System.out.println(“Value of Counter for Object 5: ” + Object5.counter);

}

}

如果我删除静态这是它显示

instanceCounter的值对于对象1:5

instanceCounter用于为MyObject的价值:5

计数器的值对象1:1

计数器的值为对象2:1

计数器的值为对象3:1

计数器的值为对象4:1

计数器的值为对象5:1

Answer 1:

由于instanceCounter是一个静态变量,所有对象共享相同的变量。 既然你每个对象的构造过程中递增instanceCounter,创造5个对象的结尾,它的值是5.因此,你得到的输出为5所有SYS出局。 那是静点

编辑
为了达到你所需要的,请执行以下操作:

class MyObject  {

    static int instanceCounter = 0;

    int counter = 0;

    MyObject() 
    {
        instanceCounter++;
        counter = instanceCounter;
    }

}


Answer 2:

你必须感到困惑的使用static variables

static class variables是每个类创建一次。 它们通过在那里所有的类实例共享的non-static class variables是针对每个对象实例创建。

所以,如果你的counter变量是static ,将被创建只有一次,由所有实例类共享。

当你访问它MyObject.counterobject1.counter等等,您正在访问同一个counter变量作为static变量可以用一个类名,以及与一个实例变量进行访问。

而如果是non-static和你的类的每个实例(或对象)都会有自己的副本counter
所以,每个的Object1Object2等等都将有自己的counter变量。

和所有的人都会有值1,让你在输出中获得1。

更新:

更改您的代码来获得你的答案中的一个的评论都提到您所需的输出:

MyObject Object1 = new MyObject();

System.out.println(“Value of Counter for Object 1: ” + Object1.counter);

MyObject Object2 = new MyObject();

System.out.println(“Value of Counter for Object 2: ” + Object2.counter);

MyObject Object3 = new MyObject();

System.out.println(“Value of Counter for Object 3: ” + Object3.counter);

MyObject Object4 = new MyObject();

System.out.println(“Value of Counter for Object 4: ” + Object4.counter);

MyObject Object5 = new MyObject();

System.out.println(“Value of Counter for Object 5: ” + Object5.counter);

System.out.println(“Value of instanceCounter for Object 1: ” + Object1.instanceCounter);

System.out.println(“Value of instanceCounter for MyObject: ” + MyObject.instanceCounter);


Answer 3:

如果你想这样做,这样,你应该再添变数,即:

class MyObject {

    int instanceCounter = 0;

    static int counter = 0;

    MyObject() {

        instanceCounter = counter;
        counter++;
    }
}


文章来源: increments by 1 and add it with every created object? [closed]
标签: java oop