코드의이 조각은 컴파일되지 않습니다 synchronized 블록 다음의 코드는 새로운 선언 된 변수를 인식합니다. 내가 어디서 잘못한거야?액세스 할 수없는 변수는 자바
2
A
답변
5
동기화가 아니므로 {}
기호입니다. 그것들은 if
, for
, synchronized
또는 심지어 시작 부분에 관계없이 범위를 정의합니다. 따라서 블록이 끝나면 a
이 범위를 벗어납니다. 블록 내에서 선언 되었기 때문입니다. (또한 Object a
선언 끝 부분에 누락 된 세미콜론이 있지만 복사하는 것을 잊어 버린 것으로 의심됩니다.)
1
변수 범위는 실행되는 항목에 의해 결정되지 않습니다. 변수는 자신들이 선언 된 블록 내부에 볼 수 있습니다 당신은 아마 이런 식으로 뭔가를 원한다. 블록 밖에 살지 않는 블록 내에 정의
Object a;
synchronized(obj) {
a = new Object()
}
System.out.println(a.toString());
0
변수. Java Language Specification 가입일
:
블록 (§14.2)에서 로컬 변수 선언의 범위는 선언 자체 초기화를 시작으로 표시되는 블록의 나머지 (§14.4) 및 포함 인 지역 변수 선언문의 오른쪽에 추가 선언자.
감사! 동기화에 맹목적으로 쳐다 보면서 나는 그 사실을 완전히 간과했다. – Antiz