我了解static initialization blocks和double brace initialization。 但是方法中的额外括号呢 编译器不会为以下代码抛出任何异常:
public static void main (String [] args) {
String hello = "Hello";
{
System.out.print(hello);
{{{{{
System.out.println(" world!");
}}}}}
}
}
那么为什么这样呢?不应该抛出java.lang.Error吗?
答案 0 :(得分:3)
Braces在Java中定义变量作用域,因此即使您基本上定义了多个等效作用域,这也是有效的。
答案 1 :(得分:2)
额外括号的唯一目的是提供范围限制。列表副本将仅存在于这些大括号内,并且不会在其外部具有作用域。
如果这是生成的代码,我假设代码生成器执行此操作以便它可以插入一些代码(例如此代码),而不必担心它插入了List副本的次数而不必担心可能重命名如果此代码段多次插入同一方法中的变量。
有时你会在喜欢折叠代码部分的代码中看到类似这样的结构,并且编辑器会自动折叠括号。他们使用它来折叠逻辑部分中的代码,这些部分不属于函数,类,循环等通常会被折叠起来的。