[英]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.