【问题标题】:Java Exception handlingJava 异常处理
【发布时间】:2011-08-20 05:49:27
【问题描述】:

我想知道如果方法调用签名有异常但方法中没有try catch块在java中会发生什么 在运行时发生异常时会发生什么。

public void someMethod (Collection<file> files) throws Exception
for(File f : files) {    
    process(f);
} 

【问题讨论】:

  • 它被抛出调用堆栈。根据定义。

标签: java


【解决方案1】:

发生异常时会发生什么。

当方法中发生异常时,该方法会创建一个异常对象并将其交给运行时系统

  • 创建异常对象并将其交给 运行时系统称为“抛出异常”

  • 异常对象包含有关错误的信息, 包括它的类型和程序的状态,当 发生错误

    运行时系统在调用堆栈中搜索包含异常的方法 处理程序

找到合适的处理程序后,运行时系统会将异常传递给处理程序

  • 异常处理程序被认为是合适的,如果 抛出的异常对象的类型与 可以由handler处理

  • 选择的异常处理程序被称为捕获异常。

    如果运行时系统彻底搜索调用堆栈上的所有方法而没有找到合适的异常处理程序,则运行时系统(以及因此程序)终止并使用默认的异常处理程序

在调用堆栈中搜索异常处理程序

【讨论】:

  • 此类帖子应标记为社区维基
【解决方案2】:

方法抛出异常与在方法中包含捕获异常的代码是不同的概念:

try/catch 中抛出的异常有资格被该构造上的 catch 块捕获。

当一个方法声明它抛出一个或多个异常时,该类型的异常可能会从该方法中抛出以被另一个方法捕获。请注意,未经检查的异常不需要声明。他们只是随心所欲,不让任何人知道发生了什么。

【讨论】:

    【解决方案3】:

    java异常处理机制有两点

    1. 异常抛出
    2. 异常处理(带有catch() 块)。

    在这种情况下,您的 someMethod() 会引发异常。如果任何方法使用此方法,则它必须捕获并处理异常。如果someMethod()的调用方法没有处理异常,那么方法调用层次结构中的任何一个方法都必须catch()处理异常。

    【讨论】:

      【解决方案4】:

      然后抛出的异常会传播给方法调用者,方法调用者必须处理它(要么捕获它,要么声明它会抛出异常)。

      【讨论】:

        【解决方案5】:

        异常只是函数的另一种返回类型。如果你没有在这个函数中捕获它,它将被传递给下一个。如果该函数无法捕获它,那么该函数还将将该异常传递给调用它的函数,并且链继续进行,直到您最终到达一个处理它的 catch 块,或者 jvm 通过系统打印其堆栈跟踪。出去。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2013-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-03
          • 2020-12-09
          • 1970-01-01
          相关资源
          最近更新 更多