java异常处理机制_Java的异常处理机制
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{ // 无论有没有抛出异常都会执行的代码}复制代码
- 在try 代码块中的语句一旦抛出异常后面未执行的代码将不会在执行,直接跳转到catch中。
- 捕获对应异常catch 可以有很多个,JVM会从第一个找起。尽量把子异常放在前面,如果你抛出的异常在它的父类后面就直接进到父类异常里了。
- 代码块finally 也会有不执行的时候,如JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。
需要java学习路线图的私信笔者“java”领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~
java异常处理机制_Java的异常处理机制相关推荐
- java 心跳程序_Java实现心跳机制的方法
一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...
- java spi机制_Java 双亲委派机制的破坏—SPI机制
作者:程序猿微录 出自:TinyRecord 原文:tinyice.cn/articles/123 Java 双亲委派机制的破坏-SPI机制 在Java的类加载机制中,默认的就是双亲委派机制,这种委派 ...
- java tcp 心跳机制_Java实现心跳机制的方法
一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...
- java finally 抛出异常_java的异常处理机制(try catch finally)
1 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过, 我亲自体验的"教训"告诉我,这个东西可不是想象 ...
- java 反射模式_java 设计模式——反射机制的应用
Java反射机制是指:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言 ...
- java通过异常处理错误_java 通过异常处理错误
1.java异常标准 在java中,Throwable这个类是所有异常或错误的父类.Throwable可以分为两种类型: error:表示编译时和系统错误,除特殊情况外,一般不用担心 exceptio ...
- java 有哪些反射机制_Java 的反射机制你了解多少?
不知道多少次听说过了Java反射机制的使用,比如:Spring 框架如何实例化IoC容器中的Bean,编码过程中如何动态的清理对象中的字段信息等等.工作中只是听说.看同事们编码实践,但是自己却只是概念 ...
- java的reflection机制_Java的Reflection机制
什么时候使用Reflection: 在java语言中,创建一个类的对象通常使用new operator,但是如果预先不知道类名,类名是在程序运行过程中通过参数传递过来,就没法使用这种方法了,这种情况下 ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
最新文章
- 技术面试,高效求职准则
- UVa12704 - Little Masters
- python黑客攻防入门下载-Python键盘钩取的自我理解(来源于《Python黑客攻防入门》)...
- Docker安装ssh,supervisor等基础工具
- Android画板控件,可以写字,签名,画画并生成图片
- Windows 10 LTSB 还原默认照片查看器
- D3中数据与DOM element绑定之data() enter() exit()浅析
- python 多线程Thread
- [转载] Python 递归函数
- centos7的firewall-cmd怎么让指定ip能访问指定端口?
- iapp退出软件按钮代码_推荐几款安卓手机开发的编程软件!
- ubuntu 安装 网易云音乐
- 矿难猫盘救砖刷回OneSpace系统的记录
- XMind8破解版安装
- 锐捷服务器虚拟化技术_交换机虚拟化技术.ppt
- css小tips -- figcaption标签
- python自动化接口_Python接口自动化——Web接口
- RDS MySQL和Mongodb 物理备份文件.xb恢复到自建数据库
- pga是啥oracle,[讨论话题]我的PGA我作主----搞清楚什么是真正的PGA
- 计网读书笔记day1
热门文章
- win10下openpose1.5安装
- 详解python中的yield(生成器)
- jmeter5.1.1启动提示not able to find java executable or version的解决办法
- LinkedList源码学习
- python部分 + 数据库 + 网络编程
- Magento 架构原则
- input readonly 光标显示问题
- 内核态(Kernel Mode)与用户态(User Mode)
- 判断IE中某个ActiveX控件是否已经安装
- Content后台的获取为什么为空