Java捕获不同的异常 公共类异常处理程序{ 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ //在这里编写代码 试一试{ 测试异常(-5); 测试异常(11); }catch(filenotfounde异常){ System.out.println(“未找到文件”); }捕获(IOE异常){ System.out.println(“发生IO错误”); }finally{//finally块总是在try块退出时执行。 System.out.println(“释放资源”); 测试异常(15); } } publicstaticvoidtestexception(inti)抛出FileNotFoundException、IOException{ if(i10){ 抛出新IOException(); } } }

Java捕获不同的异常 公共类异常处理程序{ 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ //在这里编写代码 试一试{ 测试异常(-5); 测试异常(11); }catch(filenotfounde异常){ System.out.println(“未找到文件”); }捕获(IOE异常){ System.out.println(“发生IO错误”); }finally{//finally块总是在try块退出时执行。 System.out.println(“释放资源”); 测试异常(15); } } publicstaticvoidtestexception(inti)抛出FileNotFoundException、IOException{ if(i10){ 抛出新IOException(); } } },java,Java,此代码的输出给出 找不到文件 释放资源 是否可以让java捕获IOException和FileNotFoundException?它似乎只能捕获第一个异常,而不能捕获IOException在抛出第一个异常时,try块停止,因此,testException()的第二次调用永远不会执行。您应该将您的try/catch/finally块放在另一个try/catch块中,因为您的finally块可以抛出必须捕获的异常 下面是代码的工作原理: testException(-5)抛出一个FileNotFo

此代码的输出给出

找不到文件
释放资源


是否可以让java捕获IOException和FileNotFoundException?它似乎只能捕获第一个异常,而不能捕获IOException

在抛出第一个异常时,
try
块停止,因此,
testException()的第二次调用
永远不会执行。

您应该将您的
try/catch/finally
块放在另一个
try/catch
块中,因为您的
finally
块可以抛出必须捕获的异常

下面是代码的工作原理:

  • testException(-5)
    抛出一个
    FileNotFoundException
  • FileNotFoundException
    catch(FileNotFoundException e)
  • 未找到文件
    打印到标准输出中
  • 然后执行
    最后
    块(不执行
    testException(10)
    语句)
  • 因此,
    发布资源
    被打印出来
  • 执行
    testException(15)
    时抛出一个无论如何都不会被捕获的
    IOException
    (程序将被中断)

如果从
main
方法中删除
throws-FileNotFoundException,IOException
,编译器将提醒您未捕获异常(最后
块中的异常)。

这是可能的,但不是那样。您必须将第一个try/catch嵌套在另一个try块中,并从嵌套的catch块中重新调用FileNotFoundException。但你为什么要这么做?如果你想要的话,在两个catch块中做同样的事情。首先“testException(10);”行永远不要按照你的代码执行这是一个复杂的代码示例,它包含了几个不像看起来那么容易看到的条件。我猜执行它将在标准输出中显示未捕获的异常(您应该在问题中显示)。查看我的答案以了解发生了什么。对testException()的第二个调用实际上是
testException(15)并且它实际上正在被执行(请参阅我的答案中的解释)。我指的是
try
块中的第二个。我知道,但是调用testException不会抛出IOException(因为10不是
>10
)。这不是Eneres的问题。你说的没错,但这也是问题所在,因为即使第二次调用满足抛出
FileNotFoundException
的条件,它也不会被调用,因为try块中第一次调用抛出了异常。这取决于程序员的意图。希望他能向我们解释:)
public class ExceptionHandler {

    public static void main(String[] args) throws FileNotFoundException, IOException {
    // write your code here
        try {
            testException(-5);
            testException(11);
        } catch (FileNotFoundException e){
            System.out.println("No File Found");
        } catch (IOException e){
            System.out.println("IO Error occurred");
        } finally { //The finally block always executes when the try block exits.
            System.out.println("Releasing resources");
            testException(15);
        }
    }

    public static void testException(int i) throws FileNotFoundException, IOException {
        if (i < 0) {
            FileNotFoundException myException = new FileNotFoundException();
            throw myException;
        }
        else if (i > 10) {
            throw new IOException();
        }
    }
}