Java 为什么在一个示例中需要throws关键字,而在另一个示例中不需要throws关键字?
在代码审查期间,我提出了以下问题,我不知道为什么java没有抱怨代码中存在未处理的异常。下面是不需要在方法签名中使用“抛出异常”的代码:Java 为什么在一个示例中需要throws关键字,而在另一个示例中不需要throws关键字?,java,exception,Java,Exception,在代码审查期间,我提出了以下问题,我不知道为什么java没有抱怨代码中存在未处理的异常。下面是不需要在方法签名中使用“抛出异常”的代码: private void foo() { try { String s = "Hello, world."; return; } catch (Exception ex) { throw ex; } } 以下代码将显示未处理的异常消息,除非我在方法签名中声明“抛出异常” private
private void foo() {
try {
String s = "Hello, world.";
return;
} catch (Exception ex) {
throw ex;
}
}
以下代码将显示未处理的异常消息,除非我在方法签名中声明“抛出异常”
private void bar() throws Exception {
try {
String s = "Hello, world.";
return;
} catch (Exception ex) {
throw new Exception();
}
}
为什么bar()在方法签名中需要throws关键字而foo()不需要?它们都抛出异常,并且都由catch子句“处理”
****编辑****
另一个问题的链接对我没有帮助。有人能解释一下这个答案和这个有什么关系吗?
谢谢。我猜是因为jvm知道一个块什么时候从不抛出一个检查过的异常,所以它可以推断出它是否一定是一个运行时异常