2013-08-24 4 views
1

저는 Java를 처음 사용하고 있으며 배우려고합니다. 나는 다음과 같이 두 클래스를 썼다. 나는 1, 2, 3으로 인쇄 할 것을 기대하지만, 3, 3, 3을 출력한다. 위의 동작을 알아낼 수없고 1, 2, 3을 인쇄 할 수 없다는 자바 책을 읽었다.Java 프로그램의 비정상적인 동작

public class Student{ 
    private static int indexNumber = 0; 

    Student(){ 
     indexNumber=indexNumber+1; 
    } 
    public void test() { 
     System.out.println(this.getIndexNumber()); 
    } 
    public int getIndexNumber(){ 
     return indexNumber; 
    } 
} 

public class College { 
    public static void main(String args[]){ 
     Student student1 = new Student(); 
     Student student2 = new Student(); 
     Student student3 = new Student(); 

     student1.test(); 
     student2.test(); 
     student3.test(); 
    } 
} 

아무도 도와 줄 수 있습니까?

+0

매우 유익 할 것입니다. –

답변

2

변수 indexNumber를 정적으로 정의했기 때문에 3,3,3이됩니다. 따라서 3 개의 학생 객체를 인스턴스화 할 때 indexNumber는 값 3을 얻습니다. indexNumber를 인스턴스 변수로 정의하고 값을 매개 변수로 전달합니다.

6

indexNumber은 정적이므로 클래스의 모든 인스턴스간에 "공유"됩니다. 고유 한, 증가 ID를 원하는 경우에

, 다음을 수행하십시오 각 Student가 자신의 복사본을 얻을 수 있도록

static int nextID = 1; 
int indexNumber; 

Student() { 
    indexNumber = (nextID++); 
} 

이, indexNumber 인스턴스 필드한다. 정적 변수는 할당 할 다음 ID를 추적하는 데 사용됩니다.

2

귀하의 입력란은 정적입니다. 모든 개체가 공유합니다. 1.

2

indexNumber으로 indexNumber를 증가 할 때마다 인스턴스화

private static int indexNumber = 0; 

s1-------->indexNumber<------s2 
      ^
       | 
       | 
       | 
       s3 

, 호출되는 생성자는 static로 선언하고 모든 개체의 공통된다. 그러므로 당신은 3,3,3을 얻었습니다.

정적 구성원은 어떤 개체가 아니라 클래스와 연관됩니다.

0

정적 구성원은 모든 개체와 공유됩니다. 색인을 생성하지 않았 으면 시험으로 계산됩니다.

0

INDEX NUMBER를 정적으로 선언 했으므로 클래스 용으로 만든 모든 인스턴스에서 INDEX NUMBER를 공유합니다. 당신이 정적 키워드를 제거한 경우 당신이 기대했던 대답이 올 것입니다. 그렇기 때문에 세 개의 모든 오브젝트에 대해 인덱스 번호에 대해 동일한 값을 얻습니다. 나는 지금 그것이 분명해지기를 바란다. 고맙습니다.