2012-02-26 2 views

답변

5

동기화가 아니므로 {} 기호입니다. 그것들은 if, for, synchronized 또는 심지어 시작 부분에 관계없이 범위를 정의합니다. 따라서 블록이 끝나면 a이 범위를 벗어납니다. 블록 내에서 선언 되었기 때문입니다. (또한 Object a 선언 끝 부분에 누락 된 세미콜론이 있지만 복사하는 것을 잊어 버린 것으로 의심됩니다.)

+1

감사! 동기화에 맹목적으로 쳐다 보면서 나는 그 사실을 완전히 간과했다. – Antiz

1

변수 범위는 실행되는 항목에 의해 결정되지 않습니다. 변수는 자신들이 선언 된 블록 내부에 볼 수 있습니다 당신은 아마 이런 식으로 뭔가를 원한다. 블록 밖에 살지 않는 블록 내에 정의

Object a; 
synchronized(obj) { 
    a = new Object() 
} 

System.out.println(a.toString()); 
0

변수. Java Language Specification 가입일

:

블록 (§14.2)에서 로컬 변수 선언의 범위는 선언 자체 초기화를 시작으로 표시되는 블록의 나머지 (§14.4) 및 포함 인 지역 변수 선언문의 오른쪽에 추가 선언자.