Java经验点滴:处理没有被捕获的异常
2007-08-18 16:25
232 查看
文章来源:csdn 作者:enoeht
在我们的程序中并不是所有的异常都被捕获,有些是因为我们不想捕获,因为我们认为那些异常没必要捕获
而有些是我们无法捕获的,因为我们不能确定它们会在什么地方出现,例如像NullPointerException,ClassCastException,IndexOutOfBoundsException这些RuntimeException。我们也许可以在所有它们有可能发生的地方去捕获它们,但这确实是很坏的解决方案。但在有些情况下,我们又必须在一些未捕获的异常发生时做一些事情,像释放资源、让程序离开错误状态等等。
这里通过ThreadGroup提供的一个方法,解决了这个问题,让我们的程序可以变得更健壮。ThreadGroup提供一个uncaughtException回调方法,当线程组中的线程有未被捕获的异常发生时,JVM就会去调用这个方法。
/*当有未被捕获的异常发生导致线程停止时,这个方法就会被虚拟机调用,我们只要在自己的ThreadGroup子类中override这个方法,在其中对异常进行相应的处理*/
在我们的程序中并不是所有的异常都被捕获,有些是因为我们不想捕获,因为我们认为那些异常没必要捕获
而有些是我们无法捕获的,因为我们不能确定它们会在什么地方出现,例如像NullPointerException,ClassCastException,IndexOutOfBoundsException这些RuntimeException。我们也许可以在所有它们有可能发生的地方去捕获它们,但这确实是很坏的解决方案。但在有些情况下,我们又必须在一些未捕获的异常发生时做一些事情,像释放资源、让程序离开错误状态等等。
这里通过ThreadGroup提供的一个方法,解决了这个问题,让我们的程序可以变得更健壮。ThreadGroup提供一个uncaughtException回调方法,当线程组中的线程有未被捕获的异常发生时,JVM就会去调用这个方法。
public class ApplicationLoader extends ThreadGroup { private ApplicationLoader() { super("ApplicationLoader"); } public static void main(String args[]) { Runnable addStarter = new Runnable() { public void run() { //在这里调用我们自己的程序的入口函数 //MyApplication.main(args); } }; //把我们自己的程序当作这个线程组的一个线程来运行 new Thread(new ApplicationLoader(), addStarter).start(); } |
public void uncaughtException(Thread threadf, Throwable e) { //Handle the Exception } } |
相关文章推荐
- Java经验点滴:处理没有被捕获的异常
- Java 异常处理的误区和经验总结
- 黑马程序员——Java 异常的捕获及处理
- JAVA-异常的捕获及处理
- Java 异常处理的误区和经验总结
- java捕获特定异常特定处理
- 第二十六篇:JAVA处理未捕获异常
- Java 异常处理的误区和经验总结
- java 第7章 异常的捕获及处理
- java异常的捕获及处理 兼论throws与throw
- java异常处理机制示例(java抛出异常、捕获、断言)
- Java 异常处理的捕获形式
- java处理未捕获异常
- Java 异常处理的误区和经验总结
- Java 异常处理的误区和经验总结
- Java中处理大数据量时产生OOM(Out of Memory)异常的一点经验
- 【学习笔记17】java面向对象-异常处理:捕获异常与抛出异常
- Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?
- java中如果我老是少捕获什么异常,如何处理?
- java之异常的捕获及处理