【发布时间】:2016-07-27 23:32:31
【问题描述】:
今天我写了一些Java,它的结构是这样的:
if (someCondition) {
try {
doSomething();
} catch (SomeException e) {
handleException(e);
}
}
它看起来有些难看,所以我决定从中删除多余的{}-block。
if (someCondition) try {
doSomething();
} catch (SomeException e) {
handleException(e);
}
这让我觉得try 关键字实际上是多余的。 catch 或finally 在{}-block 之后的finally 是否不足以通知编译器/程序员该块内抛出的异常有特殊处理?
编辑:澄清一下,我并不是说整个 try 块是多余的。只是 try 关键字是。上面的例子可以写成:
if (someCondition) {
doSomething();
} catch (SomeException e) {
handleException(e);
}
编辑:这里要求的是一个没有 if 的示例方法:
public void someMethod() {
{
doSomething();
} catch (SomeException ex) {
handleException(e);
}
}
同样,不使用 try 关键字清除。
【问题讨论】:
-
为什么你认为异常只在块内抛出?
-
try 关键字用于让 catch 块知道正在“尝试”什么。 {} 块存在,它们在 Java 中用于完全不同的目的
-
@MikaLammi public void doSomething(){ throw new Exception("no try block here"); }
-
这是一个关于 James Gosling 做出的设计选择的问题。我们可以评论他为什么做出他的选择,但除非引用他的话,否则这个问题无法真正回答。
-
Mika - 从根本上说,可能创建一个执行您所描述的解析器,但它在多个层面上都不好:从解析的角度来看,任何使您的备份很糟糕(较慢)。由于并非所有块都是
try块,因此当我们看到catch时,省略try将需要备份。从编程的角度来看,如果每个块 可能 是try或可能不是,则阅读起来会困难得多,我必须找到块的末尾才能确定它是否是。
标签: java syntax exception-handling try-catch language-design