在下面的示例中,您可以看到无法使用外部catch子句捕获IOException(命名为第四个)异常。这是为什么?我知道,如果在嵌套的try块中抛出异常,使用外部catch可以捕获异常。如果您将b静态变量值更改为false,那么您可以看到这一点。
但是为什么我们不能使用外部catch捕获在嵌套catch子句中抛出的异常呢?
import java.io.*;
public class Exceptions {
static boolean b = true;
public static void main(String[] args){
try {
exceptions(b);
} catch (Exception e) {
System.out.println(e + " is handled by main().");
}
}
static void exceptions(boolean b) throws Exception{
try{
if(b) throw new FileNotFoundException("FIRST");
try{
throw new IOException("SECOND");
}
catch(FileNotFoundException e){
System.out.println("This will never been printed out.");
}
}
catch(FileNotFoundException e){
System.out.println(e + " is handled by exceptions().");
try{
throw new FileNotFoundException("THIRD");
}
catch(FileNotFoundException fe){
System.out.println(fe + " is handled by exceptions() - nested.");
}
try{
throw new IOException("FOURTH");
}
finally{}
}
catch(Exception e){
System.out.println(e + " is handled by exceptions().");
}
}
}
如果b=真,则输出:
fileNotFoundException:FIRST由exceptions()处理。fileNotFoundException:第三个由exceptions()处理-嵌套。IOException:第四个由main()处理。
b=false时的输出:
IOException:第二个由exceptions()处理。
但是为什么我们不能使用外部catch捕获在嵌套catch子句中抛出的异常呢?
你可以的。问题是,上一个catch(Exception e)
处于相同的嵌套级别,这就是为什么它不能捕获前一个catch块中抛出的异常。
尝试像这样嵌套Try/catch块
static void exceptions(boolean b) {
try {
try {
if (b) throw new FileNotFoundException("FIRST");
try {
throw new IOException("SECOND");
} catch (FileNotFoundException e) {
System.out.println("This will never been printed out.");
}
} catch (FileNotFoundException e) {
System.out.println(e + " is handled by exceptions().");
try {
throw new FileNotFoundException("THIRD");
} catch (FileNotFoundException fe) {
System.out.println(fe + " is handled by exceptions() - nested.");
}
// will be caught by the nested try/catch at the end.
throw new IOException("FOURTH");
}
} catch (Exception e) {
System.out.println(e + " is handled by exceptions().");
}
}
请求(正文)
问题内容: 在大学里有关Java的问题中,有以下代码片段: 我被要求提供其输出。我回答了,但是正确答案是。为什么会这样呢?我只是不明白MyExc2去哪了。 问题答案: 通过阅读你的答案并了解你可能的想法,我相信你认为“进行中的例外”具有“优先权”。记住: 当一个新的异常被抛出到一个catch块或将要传播到该块之外的finally块中时,当新的异常向外传播时,当前异常将被中止(并被遗忘)。与其他任何
我真的不明白使用嵌套的try-catch块的意义。它们很难阅读,有时也不太直白。例如: 上面的代码可读性更强,我可以理解它的功能——如果发生异常,可以由其中一个catch块处理。但如果我使用嵌套表单: 上面的代码乱七八糟!但它实现了与第一个代码完全相同的功能。还是没有?帮我弄清楚:(
问题内容: 在Java中,我想做这样的事情: …代替: 有什么办法吗? 问题答案: 从Java 7开始,这已经成为可能。多捕获块的语法为: 但是请记住,如果所有异常都属于同一类层次结构,则可以简单地捕获该基本异常类型。 还要注意,如果从ExceptionA直接或间接继承了ExceptionB,则不能在同一块中同时捕获ExceptionA和ExceptionB。编译器会抱怨:
大家好!我只是一个学生和完全初学者学习Java。我遇到过这样的问题:“可以被替换为multi-catch或几个catch子句来捕获特定的异常”,在部分catch(Exception ex)的图像中,它有黄色的下划线颜色,这给了我一个错误。我想插入数据到我的数据库,但它没有插入,因为这个错误。正如您在我的代码中所看到的,我已经尝试打印数据,并且都很成功。能不能请谁来开导一下,帮帮我,我到底做错了什么
我有一个测试网站功能的Node.js项目。它利用Webdriver.iov4和摩卡/柴。 我创建了一个函数,用于检查页面上是否存在超时1分钟的元素。如果元素存在,它应该返回。如果没有,它应该返回。 我使用相同的函数来测试页面上是否没有元素。在这种情况下,我希望函数返回。但是,函数不会返回false,而是抛出超时错误,并且既不返回也不返回。这很奇怪,因为我在try-catch子句的catch块中包含