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. python线程池实现多线程

    参考文献 http://www.open-open.com/news/view/1c0179b http://blog.jobbole.com/52060/ 按照这个博客,实现获取多台服务器的空间使用 ...

  2. 利用 WSL 在 Windows下打造高效的 Linux 开发环境

    WSL-Windows Subsystem for Linux 介绍 The Windows Subsystem for Linux lets developers run Linux environ ...

  3. Java Web基础入门

    前言 语言都是相通的,只要搞清楚概念后就可以编写代码了.而概念是需要学习成本的. Java基础 不用看<编程思想>,基础语法看 http://www.runoob.com/java/jav ...

  4. 预加载(图片,css ,js)

    图片预加载 new Image().src = 'http://img1.t.sinajs.cn/t35/skin/skin_008/skin.css'; //新浪(4) 非ie下预加载(js,css ...

  5. Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Access denied

    装了fedora23后定时关机:sudo shutdown -h +60 弹出如下信息后立刻就关机了: Failed to call ScheduleShutdown in logind, proce ...

  6. Python 学习之路3

    接下来把剩下的实验一起写上去 实验2 写一个学生类,属性有学号,姓名,成绩(三门),方法有输出,求平均成绩. 设计思路: 1.         先写一个学生类,并向里面写一个求平均值和输出信息的方法. ...

  7. OPENGLES 绘制纹理带黑圈pre-multiplying

    1. 问题 在进行 OpenGL 纹理混合的过程中,遇到一个诡异的现象,两个纹理混合的效果出人所料: 将一个ALPHA渐变的[胡须]加在另一张图片上,这个 [胡须]是由外向里逐渐增加透明度的,也就是最 ...

  8. 《java.util.concurrent 包源码阅读》19 PriorityBlockingQueue

    前面讲ScheduledThreadPoolExecutor曾经重点讲到了DelayedWorkQueue,这里说的PriorityBlockingQueue其实是DelayedWorkQueue的简 ...

  9. Html5如何自学 只需这几步

    Html5在整个行业卷起了一场大潮流,好多人都,但是很多人都不知道该怎么学习Html5,不知道Html5该如何自学?不知道Html5开发多久才会学会?接下来将从以下几点内容详细讲述. 第一,很多人建议 ...

  10. idea+scala+spark遇到的一些问题

    1.windows中以本地模式运行spark遇到"Could not locate executable null\bin\winutils.exe in the Hadoop binari ...