为什么java中的catch块需要括号?

Har*_*Joy 12 java syntax catch-block braces

在java中,如果我们只需要执行一个语句if或者for不需要括号.我们可以写:

if(condition)
  executeSingleStatement();
Run Code Online (Sandbox Code Playgroud)

要么

for(init;condition;incr)
  executeSingleStatement();
Run Code Online (Sandbox Code Playgroud)

但是在catch块的情况下为什么我们不能省略括号?为什么这不可能?

catch(Exception e)
   e.printStackTrace();
Run Code Online (Sandbox Code Playgroud)

因为在大多数情况下 我们我在catch块中只有一个语句,它e.printStackTrace()在测试或记录语句时.

Tom*_*ine 7

找到一个编译器构建教科书,并查找悬空 - 否定歧义.

鉴于在Java中,以及大多数其他具有可怕语法的语言,间距都存在.你怎么解释:

try
try
stuff();
catch (FooException exc)
handle(exc);
catch (BarException exc)
handle(exc);
catch (BazException exc)
handle(exc);
Run Code Online (Sandbox Code Playgroud)

是吗:

try {
    try {
        stuff();
    } catch (FooException exc) {
        handle(exc);
    } catch (BarException exc) {
        handle(exc);
    }
} catch (BazException exc) {
    handle(exc);
}
Run Code Online (Sandbox Code Playgroud)

要么:

try {
    try {
        stuff();
    } catch (FooException exc) {
        handle(exc);
    }
} catch (BarException exc) {
    handle(exc);
} catch (BazException exc) {
    handle(exc);
}
Run Code Online (Sandbox Code Playgroud)

通过else将内心与最内层相关联来解决悬垂的其他歧义if.我们是否想要添加更复杂的复杂功能来处理这种糟糕的风格?没有.


Gya*_*uyn 5

我不确定为什么Java不允许这样做,但总的来说,即使只有一条语句,使用方括号还是更好的样式。它使阅读和扩展变得更容易。

这是一个相关的问题,涉及是否使用括号:JavaScript中的单行语句中是否需要大括号?


9da*_*dan 5

这不是一个可能或不可能的问题.这只是一种语言(语法)设计决策.

Java语言解析器有几种实现方式.可以在不到一天的时间内修改解析器源,并允许使用无括号的catch语句.

http://www.google.com/search?q=java+parser

还要注意Java语言语法.