在java中,如果我们必须在if
或for
之后只执行一个语句,则不需要括号。我们可以写:
if(condition)
executeSingleStatement();
或
for(init;condition;incr)
executeSingleStatement();
但是在catch块的情况下为什么我们不能省略括号?为什么这不可能?
catch(Exception e)
e.printStackTrace();
因为在大多数情况下我们我在catch块中只有一个语句,它在测试或记录语句时是e.printStackTrace()
。
答案 0 :(得分:6)
查找编译器构建教科书并查找悬空 - 否则模糊。
鉴于在Java中,以及大多数语法都很糟糕的语言,间距都存在。你怎么解释:
try
try
stuff();
catch (FooException exc)
handle(exc);
catch (BarException exc)
handle(exc);
catch (BazException exc)
handle(exc);
是吗:
try {
try {
stuff();
} catch (FooException exc) {
handle(exc);
} catch (BarException exc) {
handle(exc);
}
} catch (BazException exc) {
handle(exc);
}
或者:
try {
try {
stuff();
} catch (FooException exc) {
handle(exc);
}
} catch (BarException exc) {
handle(exc);
} catch (BazException exc) {
handle(exc);
}
通过将else
与最内层if
相关联,解决了悬空 - 其他歧义。我们是否想要添加更复杂的复杂功能来处理这种糟糕的风格?否。
答案 1 :(得分:5)
这不是一个可能或不可能的问题。这只是一种语言(语法)设计决策。
Java语言解析器有几种实现方式。可以在不到一天的时间内修改解析器源,并允许使用无括号的catch语句。
答案 2 :(得分:4)
我不确定为什么Java不允许这样做,但总的来说,即使只有一个语句,使用括号也是更好的方式。它使阅读和扩展更容易。
以下是解决是否使用括号的相关问题:Are curly braces necessary in one-line statements in JavaScript?
答案 3 :(得分:2)
来自Java Language Spec 3.0 - 如果你看第14章,它会讨论块和语句。块由{和}标识,并包含许多语句。 Try / catch / finally是块,根据语言规范需要在{}中进行分组。
答案 4 :(得分:1)
我也没有看到编写无用代码有任何好处,我也不明白更多文本可以更容易。
我通过在一行中编写单行捕获来帮助自己:
catch (InvalidArgumentException e) { die (e.getMessage()); }
catch (Exception e) { die (e); }
对我而言,这是最易读的方式。当人们试图将完整的小说写成异常名称时,它只会变得混乱。
catch (CanNotPayAttentionToThatManBehindTheCurtainThrowableRuntimeExceptionWithMessageAndCouseContainItselfAnotherCourseAndMessage e) ...
答案 5 :(得分:0)
我认为“在大多数情况下”你应该做的不仅仅是打印或记录堆栈跟踪。这意味着你吞咽了一个例外,这通常不是一个好习惯。至少,如果你不能从异常中优雅地恢复,你应该记录并重新抛出它,以防堆栈中更高的代码可以。
那就是说,我认为除了“这就是他们如何设计它”之外,你的问题确实没有答案。
答案 6 :(得分:0)
可能继承自C ++。不知道为什么C ++会这样做。在这里查看我的想法:https://stackoverflow.com/questions/6254595/how-do-you-use-the-return/6255489#6255489
值得注意的是{}
使语法更简单,即使语言设计者的生活更轻松。 if
语句就是一个很好的例子 - 你喜欢的便利并不便宜。
由于模糊不清,如
if(c1) if(c2) A; else B;
interpretation 1
if(c1)
if(c2)
A;
else
B;
interpretation 2
if(c1)
if(c2)
A;
else
B;
必须调整if
的语法以解决歧义。假设需要block
而不是任意statement
,由于存在{}
,语法会更简单。
所以他们可能只是感到懒惰。