为什么我们需要“尝试”关键字?

时间:2016-04-07 08:03:47

标签: java syntax exception-handling try-catch language-design

今天我写了一些类似于这样结构的Java:

if (someCondition) {
    try {
        doSomething();
    } catch (SomeException e) {
        handleException(e);
    }
}

看起来有些难看,所以我决定删除多余的{} - 阻止它。

if (someCondition) try {
    doSomething();
} catch (SomeException e) {
    handleException(e);
}

这使我认为try关键字实际上是多余的。在catch之后不是finally{} - 阻止足以通知编译器/程序员块中抛出的异常有特殊处理吗?

编辑:澄清一下我并不是说整个try块都是多余的。只是try关键字是。以上示例将写为:

if (someCondition) {
    doSomething();
} catch (SomeException e) {
    handleException(e);
}

编辑:这里要求的是一个不带if的示例方法:

public void someMethod() {
   {
       doSomething();
   } catch (SomeException ex) {
       handleException(e);
   }
}

再次,明确没有try关键字。

2 个答案:

答案 0 :(得分:0)

根据Java语法: catch块应该按照java语法与try块相关联。 如果你不写try,只写catch块,那么java编译器会抛出错误。

为什么设计如此: 为什么我们需要将每个catch / finally块与try关联起来编写异常特定的代码,以便在异常的情况下执行相关的尝试块。

如果java被设计为在没有try块的情况下继续进行,那么程序员不知道要写入哪个特定代码catch块并最终在一个catch块中为所有类型的异常编写回退代码,从而导致执行任何catch块代码有点例外。

另外,根据您对catch块的放置的怀疑,如果您不编写try,那么catch块(如果由Java设计者设计)必须处理在其上面编写的整个代码中生成的异常,这导致了解释的场景在上一段。

所以,最好有代码可以生成异常并与catch块相关联,catch块可以有特定的代码来处理异常。这也是在try块之后编写多个catch块的相同目的,最具体或可能第一个catch块中的异常,并且在最后一个具有泛型catch异常块。

答案 1 :(得分:-1)

Try块让catch现在可以阻止他内部发生的事情。