Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在一个示例中需要throws关键字,而在另一个示例中不需要throws关键字?_Java_Exception - Fatal编程技术网

Java 为什么在一个示例中需要throws关键字,而在另一个示例中不需要throws关键字?

Java 为什么在一个示例中需要throws关键字,而在另一个示例中不需要throws关键字?,java,exception,Java,Exception,在代码审查期间,我提出了以下问题,我不知道为什么java没有抱怨代码中存在未处理的异常。下面是不需要在方法签名中使用“抛出异常”的代码: private void foo() { try { String s = "Hello, world."; return; } catch (Exception ex) { throw ex; } } 以下代码将显示未处理的异常消息,除非我在方法签名中声明“抛出异常” private

在代码审查期间,我提出了以下问题,我不知道为什么java没有抱怨代码中存在未处理的异常。下面是不需要在方法签名中使用“抛出异常”的代码:

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知道一个块什么时候从不抛出一个检查过的异常,所以它可以推断出它是否一定是一个运行时异常