Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 在catch子句中再次引用异常后会发生什么?_Java_Exception_Exception Handling - Fatal编程技术网

Java 在catch子句中再次引用异常后会发生什么?

Java 在catch子句中再次引用异常后会发生什么?,java,exception,exception-handling,Java,Exception,Exception Handling,我在API和其他相关问题中看到了这一点: try { } catch (IOException e) { throw new SampleException("Other IOException", e); } 这将调用一个新的异常 但现在我看到了这个例子,它称自己为。我正试图编写文档,它似乎又在调用它自己 try { statements; }catch(TheException e) { //perform operations before exits;

我在API和其他相关问题中看到了这一点:

try {

} catch (IOException e) {
    throw new SampleException("Other IOException", e);
}
这将调用一个新的异常

但现在我看到了这个例子,它称自己为。我正试图编写文档,它似乎又在调用它自己

try {
    statements;
}catch(TheException e) {
    //perform operations before exits;
    throw e; 
}
重新引发异常,以便其他处理程序有机会 处理异常


我想我们不能在捕获异常后再添加一个异常!那么在这种情况下,谁是另一个处理者?我测试了它,我意识到即使catch子句之后的代码也没有编译

尝试修改JAVA中异常的工作方式,尤其是
throw/throws
关键字以及它们的区别

这是一个很好的解释

您可以随时参考以了解更多信息


关于您的问题,您的代码可能没有编译,因为
抛出的方法可能没有
抛出异常。您可以在方法头中添加
抛出异常
,使其生效,或者您可以尝试将
try/catch
包含在另一个处理(捕获)的
try/catch
TheException

尝试修改JAVA中异常的工作方式,尤其是
throw/throws
关键字以及它们的区别

这是一个很好的解释

您可以随时参考以了解更多信息

关于您的问题,您的代码可能没有编译,因为
抛出的方法可能没有
抛出异常。您可以在方法头中添加
抛出异常
,以使其生效,或者您可以尝试将
try/catch
封装在另一个处理(捕获)
异常
try/catch

那么在这种情况下,谁是另一个处理者

这几乎完全像是
catch
子句从未出现过一样,只是稍微增加了一点,即以后不会使用catch子句。例如:

try {
    methodWhichCanThrowIOException();
} catch (IOException e) {
    throw e;
} catch (Exception e) {
    // This won't be hit for IOException
}
因此:

  • 如果此代码周围有另一个try/catch语句,则其中的catch块可能会捕获异常
  • 否则,假设它是一个已检查的异常,该方法将必须声明它可以抛出该异常(或超类),并且该异常将以正常方式传播到该方法之外
有关所有详细信息,请参阅JLS的和

那么在这种情况下,谁是另一个处理者

这几乎完全像是
catch
子句从未出现过一样,只是稍微增加了一点,即以后不会使用catch子句。例如:

try {
    methodWhichCanThrowIOException();
} catch (IOException e) {
    throw e;
} catch (Exception e) {
    // This won't be hit for IOException
}
因此:

  • 如果此代码周围有另一个try/catch语句,则其中的catch块可能会捕获异常
  • 否则,假设它是一个已检查的异常,该方法将必须声明它可以抛出该异常(或超类),并且该异常将以正常方式传播到该方法之外

有关所有详细信息,请参阅JLS的和。

假设您有两种方法

第一个:

public void methodA() throws IOException {

    try {

        // methodWhichCanThrowIOException();

    } catch (IOException e) {

        // //perform operations before exits;
        throw e;
    }
}
第二个:

public void methodB() {

    try {

        methodA();

    } catch (IOException e) {

        // //perform operations;
    }
}
查看方法B如何调用方法A。最初在方法A内部引发的异常是方法A本身的处理程序,但一旦完成,方法A决定抛出异常,以便其他处理程序有机会处理该异常。注意,方法A可以在不同的类中,在不同的层中


对于方法A,抛出异常是通知方法B发生了什么事情的好方法。

假设您有两种方法

第一个:

public void methodA() throws IOException {

    try {

        // methodWhichCanThrowIOException();

    } catch (IOException e) {

        // //perform operations before exits;
        throw e;
    }
}
第二个:

public void methodB() {

    try {

        methodA();

    } catch (IOException e) {

        // //perform operations;
    }
}
查看方法B如何调用方法A。最初在方法A内部引发的异常是方法A本身的处理程序,但一旦完成,方法A决定抛出异常,以便其他处理程序有机会处理该异常。注意,方法A可以在不同的类中,在不同的层中


对于方法A,抛出异常是通知方法B发生了问题的好方法。

谢谢您的回复。在您的示例中,如果抛出的异常的数据类型与IOException匹配,则会在那里捕获它。如果不是,异常将传递到第二个catch语句。现在我假设它被抓到了,所以
抛出e导致第二次捕获
异常发生。如果是,
e
的类型是什么?我认为这是一次又一次的异常,异常不会再发生了@伯纳德:对不起,我完全不明白你的意思——你在哪里做出假设,关于什么?(以“现在我假设”开头的句子对我来说真的没有意义。)如果有让你困惑的具体情况,请在你的问题中发布一个简短但完整的程序。很抱歉让你困惑。我的意思是在你的例子中,第二个catch子句将被执行?@Bernard:只有当
方法抛出的异常,而该方法的canthrowIOException
不是
IOException
时才会执行。(可能是该方法声明的另一个已检查异常,也可能是未检查异常。)基本上,
catch
子句无法捕获同一
try
/
catch
语句中的其他
catch
子句引发的异常。感谢您的回复。在您的示例中,如果抛出的异常的数据类型与IOException匹配,则会在那里捕获它。如果不是,异常将传递到第二个catch语句。现在我假设它被抓到了,所以
抛出e导致第二次捕获
异常发生。如果是,
e
的类型是什么?我认为这是一次又一次的异常,异常不会再发生了@伯纳德:对不起,我完全不明白你的意思——你在哪里做出假设,关于什么?(以“现在我假设”开头的句子对我来说真的没有意义。)如果有让你困惑的具体情况,请发布一个简短但完整的程序