2011-08-20 159 views
2

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

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

它被扔到调用堆栈上。根据定义。 –

回答

9

发生异常时会发生什么情况。

当异常的方法中发生,该方法创建一个异常对象并把它关到运行系统

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

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

    运行时系统搜索调用堆栈包含异常 处理程序

enter image description here

当适当的处理程序中发现的方法,所述运行时系统通过处理者例外

  • 一个异常处理器,如果 类型抛出的异常对象的匹配 可以通过该处理程序

  • 选择被说成捕获该异常的异常处理程序处理的类型被认为是合适的。

    如果运行时系统穷尽搜索所有在调用堆栈上的方法,而没有找到适当的异常处理程序,运行时系统(并且因此,该程序)终止,并使用默认的异常处理程序

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

enter image description here

+0

这样的帖子应该被标记为comminity wiki – MozenRath

1

然后抛出的异常将传播到方法调用者和方法调用者必须处理它(无论是将其接住或声明本身,它会抛出异常)。

3

的方法的抛出异常是从在捕获异常的方法具有代码分离的概念:

例外在try/catch内部抛出有资格由在该构建体捕获块捕获。

当一个方法声明它抛出一个或多个异常时,该类型的异常可能会被抛出该方法而被另一个异常捕获。请注意,未检查的异常不需要声明。他们只是在不让任何人知道发生了什么事情的情况下快乐地行事。

1

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

希望这会有所帮助!

2

疗法e为2个的事情在Java异常处理机制

  1. 异常投掷
  2. 异常处理(具有catch()块)。

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