簡體   English   中英

在同步塊中聲明了不可訪問的變量-Java

[英]Inaccessible variable declared in synchronized block - Java

這段代碼將無法編譯:

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

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

但是我不知道為什么。.我的理解是,同步塊總是最終執行,所以我希望同步塊后面的代碼知道任何新聲明的變量。 我哪里錯了?

這不是同步,而是{}符號。 它們定義了一個范圍,無論它們的開頭是否存在ifforsynchronized甚至什么都沒有。 因此,一旦塊完成, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM