2011-10-22 4 views
0

Question이라는 동일한 사용자 정의 객체 유형의 인스턴스를 여러 개 만들려고합니다. 질문 클래스에는 질문에 대한 질문과 답변을 반환하는 getter 함수가 있습니다. 하나의 질문 객체 만 만들면 모든 것이 잘 작동하지만, getter 함수를 호출 할 때 다른 이름과 변수로 두 개를 만들면 가장 최근에 초기화 된 Question 객체의 값을 항상 반환합니다.동일한 객체 유형의 여러 인스턴스로 작업하는 문제

이것은 무슨 뜻입니다 : 콘솔에서

Question q1 = new Question("What is the capital of France", "Paris"); 
Question q2 = new Question("What is the capital of England", "London"); 

System.out.println(q1.getQuestion()); 
System.out.println(q2.getQuestion()); 

내가 두 개의 서로 다른 질문을 표시 할 것으로 예상하고 표시

What is the capital of England 
What is the capital of England 

입니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

+1

클래스의 변수가 정적입니까? –

+2

'Question'에 대한 코드를 보여줍니다. –

+0

'Question'의 구현과'System.out.println()'을 호출하는 부분과 같이 좀 더 많은 코드가 필요합니다. 당신이 게시 한 것을 보아서, 아무것도 잘못 보이지 않고 오류를 발견하는 것은 불가능합니다. –

답변

4

코드를 보지 않고도 나는 짐작할 수 있지만, Question 클래스에는 멤버 변수 대신 정적 변수가있는 것처럼 보입니다.

일부 사용자는 변수를 항상 this.questionthis.answer으로 시작하는 것을 옹호하고 있으므로 다른 변수가 아닌 멤버 변수를 참조하는 것입니다. 이 같은 버그를 매우 빨리 지적 할 것입니다. 그것은 확실히 당신이 new 연산자를 사용하면 단지

class Question { 
    private String question; 
    private String answer; 

    public Question(String q, String a) { 
     question = q; 
     answer = a; 
    } 

    public String getQuestion() { return question; } 
    public String getAnswer() { return answer; } 

} 
+0

변수를 정적으로 설정했습니다! 도와 줘서 고마워! – TrueWheel

+0

static은 Question 클래스 자체에 속한다는 것을 알 수 있습니다. 커뮤니티 변수와 같습니다. 정적을 제거하면 생성 된 개별 오브젝트의 일부가됩니다. (클래스의 일부분과 오브젝트의 일부분 사이의 차이점을 주목하십시오. 클래스는 객체가 만들어지는 주형입니다. 완벽한 비유는 아니지만 작동합니다. :) – corsiKa

0

, 새로운 객체가 생성됩니다, 그래서

그래서 당신이있는 경우

class Question { 
    private static String question; 
    private static String answer; 

    public Question(String q, String a) { 
     question = q; 
     answer = a; 
    } 

    public String getQuestion() { return question; } 
    public String getAnswer() { return answer; } 

} 

정적 제거합니다. 그러나 클래스에 선언 된 static 필드가 있으면 특정 클래스의 모든 인스턴스에서 공유됩니다. 따라서 static을 사용하면이 동작이 발생할 수 있습니다.

+0

도움을 주셔서 감사합니다! – TrueWheel

관련 문제