Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

  • 前言
  • 常见`RuntimeException`
  • 其他错误类型
    • `Error`类
    • `Exception`类
  • Error和Exception区分
    • Error理解
    • Exception理解
  • RunTimeException和其他Exception区分
    • 其他Exception
    • RunTimeException
  • 相关逻辑

前言

总结一下Java开发中常见的几种RuntimeException异常和其他异常表,方便以后对应排查。

常见RuntimeException

错误类型 类型解释
NullPointerException 空指针引用异常
ClassCastException 类型强制转换异常
IllegalArgumentException 传递非法参数异常
ArithmeticException 算术运算异常
ArrayStoreException 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException 下标越界异常
NegativeArraySizeException 创建一个大小为负数的数组错误异常
NumberFormatException 数字格式异常
SecurityException 安全异常
UnsupportedOperationException 不支持的操作异常

其他错误类型

Error

错误类型 类型解释
java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况
java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出
java.lang.AssertionError 断言错。用来指示一个断言失败的情况
java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常
java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出
java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段
java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常
java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误
java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常
java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误
java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况
java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误
java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误
java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误
java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误
java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误
java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束
java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况
java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出
java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误
java.lang.VerifyError 验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误
java.lang.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况

Exception

错误类型 类型解释
java.lang.Exception 根异常。用以描述应用程序希望捕获的情况
java.lang.ArithmeticException 算术条件异常。譬如:整数除零等
java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出
java.lang.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出
java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常
java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常
java.lang.CloneNotSupportedException 不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常
java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常
java.lang.IllegalAccessException 违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常
java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常
java.lang.IllegalStateException 违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常
java.lang.IllegalThreadStateException 违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常
java.lang.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常
java.lang.InstantiationException 实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常
java.lang.InterruptedException 被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常
java.lang.NegativeArraySizeException 数组大小为负值异常。当使用负数大小值创建数组时抛出该异常
java.lang.NoSuchFieldException 属性不存在异常。当访问某个类的不存在的属性时抛出该异常
java.lang.NoSuchMethodException 方法不存在异常。当访问某个类的不存在的方法时抛出该异常
java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
java.lang.NumberFormatException 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常
java.lang.RuntimeException 运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类
java.lang.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常
java.lang.StringIndexOutOfBoundsException 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常
java.lang.TypeNotPresentException 类型不存在异常。当应用试图以某个类型名称的字符串表达方式访问该类型,但是根据给定的名称又找不到该类型是抛出该异常。该异常与ClassNotFoundException的区别在于该异常是unchecked(不被检查)异常,而ClassNotFoundException是checked(被检查)异常
java.lang.UnsupportedOperationException 不支持的方法异常。指明请求的方法不被支持情况的异常

Error和Exception区分

Error理解

是编译时错误和系统错误,系统错误在除特殊情况下,都不需要做额外处理,基本不会出现。而编译时错误,如果使用编译器的情况下会提示。

Exception理解

则是可以被抛出的基本类型,需要注意和操作的也是这个类。其中,Exception又分为RunTimeException其他Exception

RunTimeException和其他Exception区分

其他Exception

受检查异常。可以理解为错误,必须要开发者解决以后才能编译通过,解决的方法有两种:

1、throw到上层;2、try-catch处理。就相当于你在使用eclipse等开发工具进行开发的时候,当某一语句可能存在异常的情况时,如果不做异常处理是不能编译通过的。

例如:在Java开发过程中,获取某一字段的当前编码长度使用String类型中的.getBytes(String charsetName)方法时,就需要对潜在异常进行强制处理,否则编辑器会报错。《Java中文编码转换与字节长度判断》

package com.action.spring;public class Cxx {public static void main(String[] args) {String chncode = "a测试";byte[] aa = chncode.getBytes("GBK");byte[] bb = chncode.getBytes("gb2312");byte[] cc = chncode.getBytes("utf8");System.out.println("GBK:"+aa.length);           // >>>5System.out.println("gb2312:"+bb.length);          // >>>5System.out.println("UTF8:"+cc.length);            // >>>7}}

此时,需要强制跑错到上层或者使用try-catch处理

1、例:使用throws抛出异常到上层,可见编辑器不再提示错误。

2、例:使用try-catch处理,可见编辑器同样不再提示错误。

RunTimeException

运行时异常,又称不受检查异常,不受编译器检查!
注意!: 在编译器中对此类异常不做检查。因为不受检查,所以在代码中可能会有RunTimeException错误风险时Java编译检查时不会做出提醒,但是在实际部署运行代码时,如果存在错误情况则会暴露出来,比如开发中经常会遇到的空指针java.lang.NullPointerException)等。如果不处理将会被java自己处理并导致程序终止。

相关逻辑

Java中常见RuntimeException与其他异常表及Exception逻辑关系详解相关推荐

  1. 关系型数据库表之间的联系[关系]详解

    关系型数据库表之间的联系[关系]详解 在表中,行和列的逻辑顺序无关紧要.每个表至少包含一列,该列被称为主键,它唯一地标识了表中的每一行. 键是表中扮演特殊角色的列,有两种键:主键.外键. 主键(Pri ...

  2. Java中的IO、NIO、File、BIO、AIO详解

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?         Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包 ...

  3. Java中的锁原理、锁优化、CAS、AQS详解!

    阅读本文大概需要 2.8 分钟. 来源:jianshu.com/p/e674ee68fd3f 一.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 二.锁实现的基本原理 2.1.v ...

  4. Java中的锁原理、锁优化、CAS、AQS详解

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:景小财 www.jianshu.com/p/e674ee68 ...

  5. java中ssm付款代码,ssm实现支付宝支付功能(图文详解)

    目录 1.支付宝沙箱环境测试 2.支付宝整合到ssm环境 3.微信支付整合到ssm环境 一.支付宝测试环境代码测试 1.下载电脑网站的官方demo: 2.下载解压导入eclipse readme.tx ...

  6. Java中VO,BO,PO,DO,DTO的详解

    概述 对象类型位置图 先来看张图 看完图估计大部分人就已经有了一个直观的感受了. 面对这个图,让我们先从承上启下的DTO开始入手 对象类型说明 DTO(Data Transfer Object)数据传 ...

  7. WCF中常见的几种Host,承载WCF服务的方法详解

    1:写在前面 我们都知道WCF在运行的时候必须自己提供宿主来承载服务.WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务.然后调 ...

  8. JAVA中的适配器应用_Java适配器模式应用之电源适配器功能详解

    本文实例讲述了Java适配器模式应用之电源适配器功能.分享给大家供大家参考,具体如下: 一.模式定义 存在两种适配器模式 1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体 ...

  9. java中po代码示例_java操作oracle常用的示例代码详解

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

最新文章

  1. 【本人秃顶程序员】使用Spring Cloud Stream和RabbitMQ实现事件驱动的微服务
  2. matlab创建mat格式变量并导入数据
  3. mysql单引号和双引号
  4. jQuery学习之jQuery Ajax用法详解
  5. MySQL常用数据类型小结
  6. rabbitMq自动创建队列
  7. python3 array为什么不能放不同类型的数据_小白入门Python数据科学全教程lt;一gt;...
  8. 选择嵌套_如何优雅地在JavaScript中访问嵌套对象
  9. PHP Smarty 学习手册
  10. 推荐几款微信小程序常用组件库
  11. Python基础语法1
  12. javascript 代码技巧 (四) —— javascript获取坐标/滚动/宽高/距离
  13. Windows10自带的 录制音频 方法
  14. 一文2000字搞懂高并发性能指标:QPS、TPS、RT、并发数、吞吐量
  15. Linux mail 命令(smtp.163.com)
  16. RenderScript 让你的Android计算速度快的飞上天!
  17. 对于Jenkins和gitlab连接的注意事项
  18. 微信聊天气泡设置方法!聊天气泡随意切换!瞬间个性十足!
  19. 【翻译】用 安全即代码 保护你的GitOps流程
  20. 智能锁忘记密码怎么办

热门文章

  1. @SuppressWarnings(resource)
  2. 纯CSS3实现打火机火焰动画
  3. (转载)操作系统还有未来么?
  4. 微软虚拟化技术——构建高效开发与测试环境
  5. Vue 学习笔记(1) Vue 基础语法 + Axios 基本使用
  6. 海龟交易法则05_掌握优势
  7. 微软顶级代码女神,编程界最有权势的女王
  8. 我38岁,从外企技术高管到失业在家,只因为做错了这件事
  9. 知乎爆赞干货:顶级大公司的OLAP数据仓库,这是全网最好的总结
  10. 数据分析只能当一辈子取数机?可能你缺少这个基础思维