7
class MyObject {

static int instanceCounter = 0;

static int counter = 0;

MyObject() {

instanceCounter++;

counter = counter + 1;

}

}

我正在使用静态整数来获取此输出:

对象 1 的 instanceCounter 值:5

MyObject 的 instanceCounter 值:5

对象 1 的计数器值:1

对象 2 的计数器值:2

对象 3 的计数器值:3

对象 4 的计数器值:4

对象 5 的计数器值:5

但它的显示

对象 1 的 instanceCounter 值:5

MyObject 的 instanceCounter 值: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);

}

}

如果我删除静态这就是它显示的内容

对象 1 的 instanceCounter 值:5

MyObject 的 instanceCounter 值:5

对象 1 的计数器值:1

对象 2 的计数器值:1

对象 3 的计数器值:1

对象 4 的计数器值:1

对象 5 的计数器值:1

4

3 回答 3

20

由于 instanceCounter 是一个静态变量,所有对象共享同一个变量。由于您在每个对象构造期间递增 instanceCounter,因此在创建 5 个对象结束时,它的值为 5。因此,您在所有 sys 输出中得到的输出为 5。这就是静态的重点

编辑
要实现您的需要,请执行以下操作:

class MyObject  {

    static int instanceCounter = 0;

    int counter = 0;

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

}
于 2012-11-17T13:32:56.097 回答
2

你一定对static variables.

static class variables每个类创建一次。它们由non-static class variables为每个对象实例创建的所有类实例共享。

因此,如果您的counter变量是static,它将仅创建一次并由您的类的所有实例共享。

当您使用MyObject.counterorobject1.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);
于 2012-11-17T13:31:34.113 回答
2

如果你想这样做,你应该添加另一个变量,即:

class MyObject {

    int instanceCounter = 0;

    static int counter = 0;

    MyObject() {

        instanceCounter = counter;
        counter++;
    }
}
于 2012-11-17T13:32:43.763 回答