【问题标题】:Why do we need "try" keyword?为什么我们需要“try”关键字?
【发布时间】: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 关键字实际上是多余的。 catchfinally{}-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


【解决方案1】:

Try 块让 catch 块现在他内部发生了什么。

【讨论】:

    【解决方案2】:

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

    为什么要这样设计:为什么我们需要将每个 catch/finally 块与 try 相关联是编写异常特定的代码,在发生异常时应该执行关联的 try 块。

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

    此外,根据您对 catch 块放置的疑问,如果您不编写 try 那么 catch 块(如果 Java 设计人员如此设计)必须处理在其上面编写的整个代码中生成的异常,这会导致所解释的场景在上面的段落中。

    因此,最好有可能产生异常的代码并与catch块相关联,catch块可以有特定的代码来处理该异常。在try块之后编写多个catch块也是相同的目的,最具体或可能的第一个 catch 块中的异常,最后一个通用的 catch 异常块。

    【讨论】:

    • 我的想法是在块之前不需要'try'关键字。在任何代码块之后的“catch”应该足以使其成为所谓的“try-catch 块”。
    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多