在synchronized块中声明的无法访问的变量 - Java

Ant*_*tiz 2 java synchronized synchronized-block

这段代码不会编译:

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

    System.out.println( a.toString() );
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么..我的理解是同步块总是最终被执行,所以我希望在synchronized块之后的代码能够知道任何新的声明变量.我哪里错了?

spa*_*ead 5

这不是同步,而是{}符号.他们定义范围,无论是否有一个if,for,synchronized,甚至没有在他们的开始.因此,a一旦块完成,它就会超出范围,因为它是在它内部声明的.(在Object a声明结尾处还有一个缺少的分号,但我怀疑你只是忘了复制它.)