2012-04-30 4 views
5

I 썬 공인 자바 프로그래머를위한 모의 시험에서 가져온 다음 코드 조각이 :자바 정적 범위 지정

System.out.println(x + y + ++x); 
:

public class Static 
{ 
     static 
     { 
      int x = 5; 
     } 

     static int x,y; 
     public static void main(String args[]) 
     { 
      x--; myMethod(); 
      System.out.println(x + y + ++x); 
     } 

     public static void myMethod() 
     { 
      y = x++ + ++x; 
     } 
} 

시험은이 라인의 결과를 묻는 메시지를

대답은 3,하지만 난 완전히 3. 왜 내가 완전히 무시하면 내가 그 답에 도달 할 수 이해가 안 :

 static 
     { 
      int x = 5; 
     } 

제 질문은 위의 코드 스 니펫의 의미는 무엇입니까? 변수 'x'의 값을 변경하지 않는 이유는 무엇입니까?

답변

4

정적 초기화 블록입니다. 하지만이 컨텍스트에서는 로컬 변수의 값을 수정하기 때문에 이것이 중요하지 않습니다.

+2

이다라고 -in 덕분에, 작동 나는 그것을 얻을 . 범위가 지정되어 있으므로 변수가 범위 뒤에 존재하지 않습니다. – czchlong

5

int x = 5;이 실행되지만 여기에서 x은 로컬 변수이고 static int x 멤버는 아닙니다.

0

X의 값이 5로 설정되어 있지만 static int x,y; 선언 정적 블록의 문맥

static 
     { 
      int x = 5; 
     } 

변수 x 내에 그 참조 코드의 나머지 부분에 의해 영향을 받는다 클래스 수준 범위를 가지며, 그것.

1

정적 블록이므로 정의한 변수는 {} 범위를 벗어납니다. 즉 그것은 x라는 지역 변수의 값을 변경

1

방법과 동일한 방식으로 된 센스 있지만 정적 멤버 필드는 즉 x이 @anonymous 단지 0