Java中,出现对于异常的处理,通常是使用try{}catch()来捕获处理的。但是在使用trycatch时,未必会将所有的异常都捕获到,所以方法声明时可以有throws xxxException。

对于这种情况,JVM到底是怎么处理的呢?下面就来看一看:

如果异常没有被catch到,那么会走接下来的流程:

1)由Thread自身的uncaughtExceptionHandler来处理

前提是Thread#uncaughtExceptionHandler不是Null。

如果是null,执行2)。

2)由Thread所属的ThreadGroup的uncaughtException方法来处理。

2.1)如果ThreadGroup有parent group,那么就调用parent group的uncaughtException来处理。也就是说,要调用最顶层的ThreadGroup的uncaughtException来处理。处理完毕就结束。最顶层的ThreadGroup处理过程是2.2)。

2.2)Thread类中有一个类静态变量:defaultUncaughtExceptionHandler。

如果有设置该值,就调用该handler的uncaughtException来处理。

如果没有设置defaultUncaughtExceptionHandler值,又不是ThreadDeath错误,则直接在System.error中打出异常日志(包括异常栈)。

上述处理过程,参见:Thread#dispatchUncaughtException(Throwable e);

那么在我们编写代码时,是可以通过:

1)Thread#setUncaughtExceptionHander() 来为某个线程设置UncaughtExceptionHander。

2)Thread.setDefaultUncaughtExceptionHander()来为设置默认的UncaughtExceptionHander。

3)如果想要改变默认的调度流程:可以重写ThreadGroup#uncaughtException() 来完成。

JavaSe:UncaughtExceptionHandler的更多相关文章

  1. JavaSe:Properties文件格式

    Properties文件格式说明 Properties继承自Hashtable,是由一组key-value的集合. 在Java中,常用properties文件作为配置文件.它的格式是什么样的呢? 下图 ...

  2. JavaSe:ThreadLocal

    JDK中有一个ThreadLocal类,使用很方便,但是却很容易出现问题.究其原因, 就是对ThreadLocal理解不到位.最近项目中,出现了内存泄漏的问题.其中就有同事在使用ThreadLocal ...

  3. JavaSe:-javaagent,-agentlib,-agentpath

    内容简述 -javaagent,-agentlib, -agentpath 说明 -javaagent示例   -javaagent.-agentlib.-agentpath -agentlib:li ...

  4. JavaSe:Cookie 管理的API介绍

    CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent - ...

  5. JavaSe:Comparator

    今天,公司里有一个萌萌的妹子问我java 中的comparator是怎么回事.参数分别是什么,返回值又是什么,为此,我写了一个简单的程序告诉了她: public static void main (S ...

  6. JavaSe:代码块执行顺序

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. //普通代码块:在方法或语句中出现 ...

  7. JavaSE:关键字(全)

    访问控制: private 访问控制方式:私有的 protected 访问控制方式:受保护的 public 访问控制方式:公共的 类.方法和变量修饰符: abstract 声明抽象,表明类或者成员方法 ...

  8. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  9. JavaSE:八种基本数据类型

    变量: 程序用来存储数据的一块内存空间,程序在运行过程中可以对其存储的数据进行改变,所以叫做变量 常量:相对于变量来说,其值是不可改变的 ​ 整数类型(byte short int long) ​ b ...

随机推荐

  1. C#删除区域实现透明

    最近在搞一个图形图像的项目.不知道经理为什么选择了C#语言,但还是要做,呵呵. 在期间出现一个比较难解决的问题如下: 删除当前图层的指定区域用来显示下面图层在这个区域的图像,相当于PS蒙版层的效果. ...

  2. Windows定时器学习

    定时器是一个在特定时间或者规则间隔被激发的内核对象.结合定时器的异步程序调用可以允许回调函数在任何定时器被激发的时候执行. 通过调用CreateWaitableTimer()可以创建一个定时器,此函数 ...

  3. tornado之子模板

    #!/usr/bin/env python26 #-*- coding:utf8 -*- import tornado.httpserver import tornado.ioloop import ...

  4. swizzle method 和消息转发机制的实际使用

    我的工程结构,如图 1-0 图  1-0 在看具体实现以前,先捋以下 实现思路. ViewController 中有一个-(void)Amethod;A方法. -(void)Amethod{ NSLo ...

  5. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  6. Java开发步骤

    3.编辑Java源程序 使用纯文本编辑器,比如记事本notpad.exe:EditPlus.UltraEdit等专业的纯文本编辑器. Word不是纯文本编辑器. 需求:写一个Java程序,在控制台打印 ...

  7. 对NumPy中dot()函数的理解

    今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题.就是dot函数是如何对矩阵进行运算的. 一.dot()的使用 参考文档:https://docs.scipy.org/doc/num ...

  8. js中一些注意点 ps不断更新中....

    nextSibling 和 nextElementSibling 的区别 (previousSibling 和 previousElementSibling ) nextSibling 在IE8及以下 ...

  9. 【java提高】---HashMap解析(一)

    HashMap解析(一) 平时一直再用hashmap并没有稍微深入的去了解它,自己花点时间想往里面在深入一点,发现它比arraylist难理解很多,好多东西目前还不太能理解等以后自己知识更加丰富在过来 ...

  10. weakSelf 和 strongSelf

    最近在看SDWebImage源码,碰到一些比较绕的问题,理解了很久,然后在网上查了些的资料,才算是有了一些理解.在此记录一下. 源码如下: block会copy要在block中使用的实变量,而copy ...