2013-05-26 1 views
1

나는 자동차 나는 1 이 코드 나던 작업을 시작 만들 때마다 새로운 객체에 INDX을 증가하고자하는방법 자바의 OOP 클래스의 자동 증가 데이터 필드에

public class NInfo { 
private int val; 
private static int indx=1; 

public NInfo(int val) { 
    this.val = val; 
    this.indx++; 
    } 
} 

이 클래스를, 무엇을 나는하여야한다 고쳐?

+2

그래도 작동하지만'this.indx ++ '(또는 단순히'indx ++') 대신'NInfo.indx ++'를 사용해야합니다. 사이드 노트 : 맛의 문제이지만'indx'가 아닌'index'라고 이름 지을 것입니다 ('e'를 제거 할 필요가 없습니다). – sp00m

+0

다른 변수'index'를 만들어서'this.indx ++'로 설정하십시오. 정적 변수는 객체가 아닌 클래스에 속합니다. – Maroun

+0

여기에 무슨 일이 일어 났을까요? – Adarsh

답변

4

정적 필드는 클래스의 모든 인스턴스에서 공유됩니다. 인스턴스에 특정한 새 필드에 값을 저장해야합니다.

public class NInfo { 
private int val; 
private int index; 
private static int indx=1; 

public NInfo(int val) { 
    this.val = val; 
    this.index = indx++; 
    } 
} 

왜 각 색인에 이러한 색인을 추가 하시겠습니까?

+0

이 값을 사전에 증가 시키려고합니다. 또한 indx는 고정되어 있으므로이를 참조하면 안됩니다. – cogsmos

+0

@cogsmos 그냥 정적 조각으로 나타났습니다. 왜 preincrement? 첫 번째 인스턴스의 값은 2일까요? –

+0

맞습니다. 잘못 읽었으며 0에서 시작한다고 생각했습니다. – cogsmos

0

연산자 작업을 잊어 버렸습니다.

NInfo.indx += 1; 

편집 :

public class NInfo { 

    private int id; 
    private int value; 

    private static int index; // auto initialized to 0 

    public NInfo(int value) { 
    this.val = val; 
    this.id = NInfo.index += 1; 
    } 

} 
+0

'+ = 1'은'++'와 정확히 같습니다. – sp00m

+0

@ sp00m 네, 저도 압니다. 내 코드가 덜 장황하다. (NInfo.indx = ++ NInfo.indx;) 일부 키 입력 만 저장하면됩니다. 너 나를 오해 했어. –

+0

@ sp00m 맛이 좋은 친구였습니다. :) –

0

당신이 생성자에서 속성처럼 INDX을 통과, 당신은 클래스의 모든 객체가 가지고있는

+0

a ... 무엇을 만드세요 !! – Adarsh

+0

이 답을 다시 말해야합니다. 네가하는 말은 나에게 분명하지 않다. – tmyklebu

1

을 만들 인덱스를 증가한다 정적 인 것을 제외하고 클래스에 정의 된 모든 속성과 메소드. 정적 변수와 메소드는 클래스 인스턴스의 일부가 아닙니다. this. 연산자는 클래스의 특정 인스턴스를 참조하는 데 사용됩니다. 정적 변수를 참조하려면 객체를 인스턴스화 할 필요가 없습니다. ClassName.variableName을 사용하여 직접 변수를 참조 할 수 있습니다. 따라서 코드에서 변수의 새 인스턴스를 만들 때마다 indx가 증가합니다 (이후 증분 이후로 2부터 시작).

개체에 새 증분 값을 할당하려면 indx를 증가시키고 실제로 클래스 인스턴스의 일부인 변수 (정적이 아닌 변수)에 할당합니다.

관련 문제