2012-11-17 2 views
4
class MyObject { 

static int instanceCounter = 0; 

static int counter = 0; 

MyObject() { 

instanceCounter++; 

counter = counter + 1; 

} 

} 

나는이 출력 얻을 수있는 정적의 int를 사용하고 있습니다 : MyObject를위한 instanceCounter 5은 1 씩 증가하고 모든 생성 된 개체와 함께 추가합니까?

값 : 객체에 대한 카운터의 5

값 오브젝트 1 instanceCounter의

값 1 : 1

개체 2에 대한 카운터 값 : 2

객체 5 카운터의 4

값 : 3

객체 4 카운터의 값 : 5

그러나 그것의

값을 표시하는 오브젝트 3 카운터의3210 가치 instanceCounter for Object 1 : 5

MyObject의 인스턴스 카운터 값 : 5

: 개체 4 카운터의 5

값 : 오브젝트 3 카운터의 5

값 : 오브젝트 2 카운터의 5

값 : 오브젝트 1 카운터의 516,

값 객체 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의

값을 표시 것입니다 : 개체 1 카운터의 5

값 : MyObject를위한 instanceCounter 5

값 : 1

개체 2에 대한 카운터 값 : 1

카운터 값 객체 5 카운터 1

값 : 오브젝트 4 카운터의 1

값 : 오브젝트 3 1

+2

아니 진짜 문제 – arshajii

답변

14

instanceCounter는 정적 변수이기 때문에 모든 객체는 동일한 변수를 공유합니다. 각 오브젝트 생성 중에 instanceCounter를 증가 시키므로 5 개의 오브젝트 작성이 끝나면 값은 5입니다. 결과적으로 모든 sys 출력에서 ​​5로 출력됩니다. 정적

편집 지점 그게 전부
는 다음을 수행 필요 달성하기

class MyObject { 

    static int instanceCounter = 0; 

    int counter = 0; 

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

} 
+1

하지만 내가 원하는 것은 instancecounter가 5를 저장하지만 생성자가 호출 될 때마다 증분 값을 저장하는 카운터입니다. 필요한 출력 : MyObject를위한 instanceCounter 5 값 : 1 개체 2 카운터 값 : 2 값 개체 1 카운터의 5 값 개체 1 instanceCounter의 값 카운터의 객체 3 : 개체 5 카운터의 4 값 : 오브젝트 4 카운터의 3 값 5 –

+1

RAAM 솔루션은 감사 일 많이, 왜 당신이 변경하고 왜 설명하십시오? –

+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.counter 또는 object1.counterstatic 변수는 클래스 이름으로뿐만 아니라 인스턴스 변수에 액세스 할 수있는 등, 같은 counter 변수를 액세스로 액세스 할 때.

그리고 non-static이고 클래스의 모든 인스턴스 (또는 개체)가 counter의 자체 복사본을 갖게됩니다.
귀하의 Object1, Object2 등은 모두 자신의 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 = counter +1 대신에 모든 객체에 대해 1,1,1,1,1과 같은 결과가 나타납니다. –

+0

하지만 그게 내가 바꾼 유일한 것만은 아니야. 나는 또한 instanceCounter를 비 정적으로 만들었고, 나는 그 값을 생성자에 할당했다. 그런 다음 정적 필드를 증가시킨다. –

+1

instancecounter의 값을 id에 저장하는 방법을 알려 주실 수 있습니까? 제 선생님은 1,2,3,4,5 등의 카운터 값을 표시 할 수있는 방법을 알려 주셨습니다. 생성 된 모든 객체와 인스턴스 카운트의 총 개수는? –

관련 문제