2012-11-17 51 views
4
class MyObject { 

static int instanceCounter = 0; 

static int counter = 0; 

MyObject() { 

instanceCounter++; 

counter = counter + 1; 

} 

} 

我使用静态整数得到这个输出:5增加1并将其添加到每个创建的对象?

价值instanceCounter为MyObject来:计数器为对象的5

价值instanceCounter为对象1

价值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); 

} 

} 

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

价值instanceCounter为对象1:5

价值instanceCounter为MyObject来:计数器为对象1 5

价值: 1

计数器对象2的值:1

计数器的值为对象3:1

值计数器的对象为4:1

值计数器的对象为5:1

+2

不是一个真正的问题 – arshajii

回答

14

由于instanceCounter是一个静态变量,因此所有对象共享相同的变量。由于您在每个对象构造过程中增加了instanceCounter,因此在创建5个对象时,其值为5. 因此,您将所有系统输出中的输出都设置为5。这就是静态

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

class MyObject { 

    static int instanceCounter = 0; 

    int counter = 0; 

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

} 
+1

但我想要的是instancecounter在其中存储5,但计数器每次调用构造函数时存储递增的值。 所需的输出: 值instanceCounter为对象1:5 值instanceCounter的用于为MyObject:1 值计数器的用于对象2:2 值计数器的对对象1 5 值计数器的对象为3:3 值计数器为对象的4:4 值计数器的对象为5:5 –

+1

中距空空导弹的解决方案工作的感谢很多,请解释你改变了什么,为什么? –

+1

@Mansoor我制作了一个实例变量。这意味着每个对象都有自己的变量counter,存储在counter中的值只针对该对象。所以我做的是增加每个对象构造中所有对象共享的静态变量,然后将其值赋给实例变量。阅读此链接了解更多详情http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html – Raam

2

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

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

因此,如果您的counter变量为static,它将只会创建一次并由您班级的所有实例共享。

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

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

它们都将具有值1,因此您在输出中获得1。

UPDATE:

更改您的代码来获得您已在其中一个答案的评论中提及您所需的输出:

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); 
+0

所以没有办法,我可以显示1,2,3,4 ,5等等,每当我调用构造函数的唯一计数器,即使我删除与计数器的静态? –

+0

看到我更新的答案,并希望它能帮助你。 – Abubakkar

+0

这没有奏效,Raam的解决方案奏效。 :)但感谢所有的帮助。 –

0

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

class MyObject { 

    int instanceCounter = 0; 

    static int counter = 0; 

    MyObject() { 

     instanceCounter = counter; 
     counter++; 
    } 
} 
+2

我已经尝试添加counter ++;而不是计数器=计数器+1:但输出与所有对象的1,1,1,1,1相同。 –

+0

但这并不是我改变的唯一东西 - 我也使得instanceCounter非静态,并且我在构造函数中赋值它,然后增加静态字段。 –

+1

你能告诉我如何在ID中存储instancecounter的值,我的先生告诉我,我可以显示计数器的值为1,2,3,4,5 .....每创建一个对象和实例计数器中的总数? –

相关问题