在try / catch块(Java)中引发异常

时间:2016-06-06 14:43:57

标签: java try-catch

几周前我刚开始学习Java。我从我的教科书中读到它说:如果异常发生在执行一个被'try'块包围的代码块的中途,然后是几个'catch'子句(有自己的代码块),将跳过try块的其余部分,如果有一个与异常类型匹配的catch子句,则将执行与catch子句关联的块。 但是,如果没有匹配的catch子句会发生什么?什么都不会执行或任何特定情况会发生?我理解这只是一个简单的问题,但我无法找到答案。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

如果没有catch catch来捕获指定的异常,则会向上抛出错误(就好像你没有try / catch系列)。如果存在finally块,它当然仍将被执行。

答案 1 :(得分:1)

我会试着为你解释一下。

以下是抛出异常的方法示例:

public void anExceptionThrowingMethod() {
    throw new Exception("Uh oh an exception occurred!");
}

如果我们尝试这样调用此方法:

anExceptionThrowingMethod();

你的程序会崩溃,你会收到错误:

java.lang.IllegalArgumentException: Uh oh an exception occurred!

这是因为当我们调用该方法时,我们还没有处理发生错误的情况。为此,我们使用try{ } catch { }块:

try {
    anExceptionThrowingMethod();
} catch(Exception e) {
    System.out.println("We handled the exception!");
}

该程序现在不再崩溃,并将打印:

We handled the exception!

运行此代码时,异常抛出方法将引发异常。 catch块将捕获该异常,并将打印出堆栈跟踪。执行异常抛出方法后没有代码:

try {
    anExceptionThrowingMethod();
    // Nothing will be executed after this
} catch(Exception e) {
    // Instead, this catch block will be executed
    System.out.println("We handled the exception!");
}

如果您总是想要执行某些代码,即使发生了异常,也可以使用finally块:

try {
    anExceptionThrowingMethod();
    // Nothing will be executed after this
} catch(Exception e) {
    // Instead, this catch block will be executed
    System.out.println("We handled the exception!");
} finally {
    // This block will always be executed, regardless of whether an exception has occurred.
}

如果存在多个异常类型,您可以捕获超类Exception,也可以单独处理每个异常类型:

try {
    manyExceptionThrowingMethod();
    // Nothing will be executed after this
} catch (InterruptedException e) {
    // Called when an InterruptedException occurs
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    // Called when an IllegalArgumentException occurs
    e.printStackTrace();
} finally { 
    // This code will always be executed, regardless of whether an exception has occurred.
}

如果您不处理异常类型,则在发生错误时程序将崩溃