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()在测试或记录语句时.
找到一个编译器构建教科书,并查找悬空 - 否定歧义.
鉴于在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.我们是否想要添加更复杂的复杂功能来处理这种糟糕的风格?没有.
我不确定为什么Java不允许这样做,但总的来说,即使只有一条语句,使用方括号还是更好的样式。它使阅读和扩展变得更容易。
这是一个相关的问题,涉及是否使用括号:JavaScript中的单行语句中是否需要大括号?
这不是一个可能或不可能的问题.这只是一种语言(语法)设计决策.
Java语言解析器有几种实现方式.可以在不到一天的时间内修改解析器源,并允许使用无括号的catch语句.
http://www.google.com/search?q=java+parser
还要注意Java语言语法.
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |