[英]Inaccessible variable declared in synchronized block - Java
這段代碼將無法編譯:
synchronized( obj ) {
Object a = new Object()
}
System.out.println( a.toString() );
但是我不知道為什么。.我的理解是,同步塊總是最終執行,所以我希望同步塊后面的代碼知道任何新聲明的變量。 我哪里錯了?
這不是同步,而是{}
符號。 它們定義了一個范圍,無論它們的開頭是否存在if
, for
, synchronized
甚至什么都沒有。 因此,一旦塊完成, a
就會超出范圍,因為它是在其中聲明的。 (此外, Object a
聲明的末尾缺少分號,但我懷疑您只是忘記復制該分號。)
變量范圍不取決於執行的內容。 變量僅在聲明它們的塊內部可見。您可能想要執行以下操作:
Object a;
synchronized( obj ) {
a = new Object()
}
System.out.println( a.toString() );
塊內定義的變量不在該塊外。
根據Java語言規范 :
塊中的局部變量聲明的范圍(第14.2節)是該聲明出現在該塊的其余部分,從其自身的初始化程序(第14.4節)開始,並在該局部變量聲明語句的右側包括其他任何聲明符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.