2012-02-26 14 views
2

は、コードのこの作品は、コンパイルされませんsynchronizedブロックに続くコードが新しい宣言された変数を認識することを期待してください。どこが間違っていますか?アクセスできない変数は、Java

答えて

5

これは同期ではなく、{}シンボルです。彼らはiffor、​​のいずれかに関係なく、スコープを定義します。したがって、ブロックが完了すると、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)で開始し、いずれかを含みますローカル変数宣言ステートメントの右側の宣言子を追加します。

関連する問題