Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java 的 throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

Error

Error 是 Throwable 的子类,用于指示应用程序不应该试图捕获的严重问题。Error 也叫系统级异常,它是为无法预计的,程序无法处理的异常错误,表示运行应用程序过程中出现了较严重问题。一般情况都是在JVM上出现了问题。

在执行该方法期间,无需在其 throws 子句中声明可能抛出但是未能捕获的 Error 的任何子类,因为这些错误是不确定的不会重复出现的。

Error有如下常见且重要的子类:

  • AnnotationFormatError 当注释解析器试图从类文件读取注释并确定注释出现异常时,抛出该错误。
  • IOError 当发生严重的 I/O 错误时,抛出此错误。
  • ThreadDeath 调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。 仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。 如果没有捕获 ThreadDeath,则顶级错误处理程序不会输出消息。虽然 ThreadDeath 类是“正常出现”的,但它只能是 Error 的子类而不是 Exception 的子类,因为许多应用程序捕获所有出现的 Exception,然后又将其放弃。
  • LinkageError LinkageError 的子类指示一个类在一定程度上依赖于另一个类;但是,在编译前一个类之后,后一个类发生了不相容的改变。它一共有7个直接子类。
  • VirtualMachineError 当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。子类有:InternalError (该异常指示 Java 虚拟机中出现一些意外的内部错误),OutOfMemoryError (因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常),StackOverflowError (当应用程序递归太深而发生堆栈溢出时,抛出该错误),UnknownError (当 Java 虚拟机中出现一个未知但严重的异常时,抛出该错误)。

Exception

同样作为Throwable的子类,既然Error是系统级异常,与之对应的Exception就是应用级异常。这种异常通常都是可能预料到的,由应用抛出该类异常,执行方法时再捕获该类异常。

Exception的直接子类有很多,大概有数十个,我们将它的所有子类分为两类:

  • 运行时异常1,运行时异常(RuntimeException)是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。程序编译时是不知道到底会不会触发该异常的,只有程序运行起来才知道。它的子类也有很多,例如有空指针异常(NullPointerException), 对象强制转换异常(ClassCastException)等等。 2,因为运行时异常的不确定性,所以对于程序中抛出的RuntimeException及其子类在程序执行方法期间是不需要我们强制捕获处理它的。 3,RuntimeException跟Error性质上差不多,都是在程序运行期间可能会产生的异常。但是Error是系统级的异常大都是JVM相关的异常,而RuntimeException则是应用程序级别的异常。
  • 其他应用异常1,其他应用异常就是Exception的所有子类里除了RuntimeException外的异常,这些异常都是在执行之前可预见的异常。例如IOException、SQLException等以及用户自定义的Exception异常。 2,这些异常与RuntimeException不同的是编译器强制要求必须捕获处理他们,即如果程序某处抛出了异常,那么在执行方法前一定要先捕获异常。

捕获异常

try{ // 可能会抛出异常的代码}catch(Exception e){ // 捕获异常的位置}finally{ // 无论有没有抛出异常都会执行的代码}复制代码
  1. 在try 代码块中的语句一旦抛出异常后面未执行的代码将不会在执行,直接跳转到catch中。
  2. 捕获对应异常catch 可以有很多个,JVM会从第一个找起。尽量把子异常放在前面,如果你抛出的异常在它的父类后面就直接进到父类异常里了。
  3. 代码块finally 也会有不执行的时候,如JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。

需要java学习路线图的私信笔者“java”领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

java异常处理机制_Java的异常处理机制相关推荐

  1. java 心跳程序_Java实现心跳机制的方法

    一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...

  2. java spi机制_Java 双亲委派机制的破坏—SPI机制

    作者:程序猿微录 出自:TinyRecord 原文:tinyice.cn/articles/123 Java 双亲委派机制的破坏-SPI机制 在Java的类加载机制中,默认的就是双亲委派机制,这种委派 ...

  3. java tcp 心跳机制_Java实现心跳机制的方法

    一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...

  4. java finally 抛出异常_java的异常处理机制(try catch finally)

    1 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过, 我亲自体验的"教训"告诉我,这个东西可不是想象 ...

  5. java 反射模式_java 设计模式——反射机制的应用

    Java反射机制是指:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言 ...

  6. java通过异常处理错误_java 通过异常处理错误

    1.java异常标准 在java中,Throwable这个类是所有异常或错误的父类.Throwable可以分为两种类型: error:表示编译时和系统错误,除特殊情况外,一般不用担心 exceptio ...

  7. java 有哪些反射机制_Java 的反射机制你了解多少?

    不知道多少次听说过了Java反射机制的使用,比如:Spring 框架如何实例化IoC容器中的Bean,编码过程中如何动态的清理对象中的字段信息等等.工作中只是听说.看同事们编码实践,但是自己却只是概念 ...

  8. java的reflection机制_Java的Reflection机制

    什么时候使用Reflection: 在java语言中,创建一个类的对象通常使用new operator,但是如果预先不知道类名,类名是在程序运行过程中通过参数传递过来,就没法使用这种方法了,这种情况下 ...

  9. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

最新文章

  1. 技术面试,高效求职准则
  2. UVa12704 - Little Masters
  3. python黑客攻防入门下载-Python键盘钩取的自我理解(来源于《Python黑客攻防入门》)...
  4. Docker安装ssh,supervisor等基础工具
  5. Android画板控件,可以写字,签名,画画并生成图片
  6. Windows 10 LTSB 还原默认照片查看器
  7. D3中数据与DOM element绑定之data() enter() exit()浅析
  8. python 多线程Thread
  9. [转载] Python 递归函数
  10. centos7的firewall-cmd怎么让指定ip能访问指定端口?
  11. iapp退出软件按钮代码_推荐几款安卓手机开发的编程软件!
  12. ubuntu 安装 网易云音乐
  13. 矿难猫盘救砖刷回OneSpace系统的记录
  14. XMind8破解版安装
  15. 锐捷服务器虚拟化技术_交换机虚拟化技术.ppt
  16. css小tips -- figcaption标签
  17. python自动化接口_Python接口自动化——Web接口
  18. RDS MySQL和Mongodb 物理备份文件.xb恢复到自建数据库
  19. pga是啥oracle,[讨论话题]我的PGA我作主----搞清楚什么是真正的PGA
  20. 计网读书笔记day1

热门文章

  1. win10下openpose1.5安装
  2. 详解python中的yield(生成器)
  3. jmeter5.1.1启动提示not able to find java executable or version的解决办法
  4. LinkedList源码学习
  5. python部分 + 数据库 + 网络编程
  6. Magento 架构原则
  7. input readonly 光标显示问题
  8. 内核态(Kernel Mode)与用户态(User Mode)
  9. 判断IE中某个ActiveX控件是否已经安装
  10. Content后台的获取为什么为空