2012-07-17 6 views
-1

나는 지난 몇 시간 동안 아래에서 당황 스러웠습니다. I 좋아해서, 제로 비율에 대한 상수 분획 클래스를 가지고 계속개인 정적 최종 변경 값

class Fraction{ 
    private static final Fraction ZERO = new Fraction(0,1); 

    public static Fraction zero(){ 
     return ZERO; 
    } 
[etc] 
} 

, I 발견하는 점에서의 실행 과정에서 ZERO 변화 값 :

System.out.println(Fraction.zero()); 
Fraction half = new Fraction(1, 2); 
System.out.println(Fraction.zero()); 

출력 :

1/1 
1/2 

분명히 생성 된 값은 0/1이어야하며, 더 중요한 것은 고정되어야합니다. 문제는 분명히 Fraction 클래스와 GCD 계산기의 구현과 관련이 없습니다. 과거에 성공적으로 광범위하게 사용했기 때문입니다.

이 이상한 행동의 원인에 대한 아이디어와 생각은 감사하겠습니다.

+1

[최소 테스트 케이스] (http://sscce.org)하시기 바랍니다. –

+1

나머지 코드 plz – DaTroop

+1

참고 : http://ideone.com/vyK81. –

답변

3

우리는 나머지 코드를 클래스에 표시해야합니다. 제 생각에 분자 변수와 분모 변수는 정규 인스턴스 변수였던 반면 static으로 표시되었습니다.

final 필드가 참조하는 개체의 내용에는 아무런 문제가 없습니다. final 수정자는 필드를 다른 개체를 참조하도록 만들지 못하게합니다. 개체 자체는 보호되지 않습니다.

+1

특히 생성자를 표시하십시오.이 코드는 값을 변경하는 것으로 보이는 코드이며 수정 된 멤버의 선언입니다. –

+1

고마워, 분자와 분모는 참으로 정적이었다. 이것은 그것을 해결했다. 정적/최종 존중에서 나는 (나는 다시 한 번 깨달았다.)이 클래스를 처음 작성할 때 초보자였다. –

+2

@NominSim : 편집되지 않은 상태에서보고있는 내용이 보이지 않는 한, 이는 분명히 대답입니다. –

관련 문제