Zak*_*aki 1 java exception-handling exception
在我读过的一些代码中,我遇到过这个问题:
class Someclass
{
public static void main(String[] args) throws IOException
{
//all other code here......
}
}
Run Code Online (Sandbox Code Playgroud)
如果main()抛出异常,在这种情况下是一个IOException,它在哪里被捕获和处理?
编辑:这被认为是不好的做法?或者这在现实世界的代码中真的很常见吗?
此处给出了完整未捕获异常处理的详细流程图:Java中如何处理未捕获的异常.
发生未捕获的异常时,JVM执行以下操作:
- 它在发生异常
dispatchUncaughtException()的Thread类上调用一个特殊的私有方法;
- [...]调用线程的
getUncaughtExceptionHandler()方法来找出要使用的适当的未捕获异常处理程序.通常,这实际上是线程的父级ThreadGroup,handleException()默认情况下其方法将打印堆栈跟踪.- 然后它终止发生异常的线程.
因此,如果您愿意,您可以创建自己的自定义未捕获异常处理程序.
还应当指出的是,虽然main是常用的Java应用程序的入口点,方法是一样的,因为它的任何其他的方法可以也可以从其他上下文调用(例如:其他main方法,甚至本身递归!).在这种情况下,调用者可以捕获抛出的异常.
public class SelfCatch {
public static void main(String args[]) throws Exception {
if (args == null) throw new Exception("Hi there!");
try {
main(null);
} catch (Exception e) {
System.out.println("Caught: " + e);
}
System.out.println("Exiting...");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Caught: java.lang.Exception: Hi there!
Exiting...
Run Code Online (Sandbox Code Playgroud)