Java 区别于;抛出(e)“;及;扔“e”字;?

Java 区别于;抛出(e)“;及;扔“e”字;?,java,exception,throw,Java,Exception,Throw,我遇到了这个rethrown异常,并对它甚至可以编译感到惊讶 } catch(SomeException e) { ... throw(e); } 这个throw()和通常使用的有什么区别吗 } catch(SomeException e) { ... throw e; } 任何指向记录此内容的链接或选择其中一种的指南?许多语言都允许在表达式周围添加任意多的括号。Java就是其中之一。以下是完全有效的代码 public class HelloWorld {

我遇到了这个rethrown异常,并对它甚至可以编译感到惊讶

} catch(SomeException e) {
    ...
    throw(e);
}
这个throw()和通常使用的有什么区别吗

} catch(SomeException e) {
    ...
    throw e;
}

任何指向记录此内容的链接或选择其中一种的指南?

许多语言都允许在表达式周围添加任意多的括号。Java就是其中之一。以下是完全有效的代码

public class HelloWorld {
  public static void main(String[] args) {
    throw ((((new RuntimeException()))));
  }
}

所以,除了源文件大两个字节之外,这两者完全没有区别。

在功能上是等效的


但是,不要选择
throw(e),因为有人可能会把它误认为是一个方法调用,最起码也会让人不必要地怀疑你在做什么。喜欢正常的
抛出e语法。

Throw是抛出“throwable”(通常是异常)的指令

想一想,如果它像一个返回语句

Public int get value() {
    return 3;
}
等于

Public int get value() {
    return (3);
}
扔掉也一样


表面上看,他们将遵守完全相同的事情

它们是相同的,就像是多余的分组括号一样。@eis在这种情况下,上下文应该记录在异常本身中。当我们进行此项工作时,无论您是否重试,记录
e.getMessage()
都不是一个好主意。我删除了log()行,以免使问题变得模糊。@eis您所说的是记录不在例外范围内的信息。我不是反对,我说的是不记录异常,然后抛出相同的异常。“因此,除了源文件大两个字节之外,没有什么区别。”而且可读性要差得多。对。不必要的括号,既不是功能上需要的,也不是可读性改进,是容易出错的死代码。