在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。

Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

①.Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 Input 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。

Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。

②.Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现不受检查异常和受检查异常的划分

Java中的异常分为两大类:

1.Checked Exception(非Runtime Exception)

2.Unchecked Exception(Runtime Exception)

运行时异常

RuntimeException类是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。

Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。对于非运行时异常(checked exception),必须要对其进行处理,否则无法通过编译。

处理方式有两种:

1.使用try..catch..finally进行捕获;

2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。

对于运行时异常(runtime exception),可以对其进行处理,也可以不处理。推荐不对运行时异常进行处理。

扩展:错误和异常的区别(Error vs Exception)

1).java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。

java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

2).Error和RuntimeException及其子类都是未检查的异常(unchecked exceptions)而所有其他Exception类都是检查了的异常(checked exceptions)。

checked exceptions:通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。

unchecked exceptions:通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。

RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

java测试类和类_【测试开发】从测试角度看Java异常类(错误和异常区别介绍)相关推荐

  1. 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误

    初级测试开发面试题 自从我编写第一个单元测试以来已经有10年了. 从那时起,我不记得我已经编写了成千上万的单元测试. 老实说,我在源代码和测试代码之间没有任何区别. 对我来说是同一回事. 测试代码是源 ...

  2. 开发转测试没人要_前端开发,测试,后端,该如何选择?

    一般来说前端会比后端简单一些的,初学者或者转行可能考虑前端多一点,但是后端开发的薪水又比前端高一些,就是比较枯燥. 前端开发 我目前一直在自学前端,从网上找资料,然后听课,只要是对编程有兴趣,应该都能 ...

  3. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  4. 从JVM的角度看JAVA代码--代码优化

    从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一重复计算 片段二重复比较 在JVM加载优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...

  5. 从JVM的角度看JAVA代码1

    从JVM的角度看JAVA代码1 从JVM指令的角度来分析++,--问题可以分析的非常透彻,这里给出两个案例.通过这两个案例就能知道JAVA中前++和后++的原理了,同时也可以推论出--的情况. pub ...

  6. 项目实体类报错_第一次开发项目感想

    1.大一感想 第一次真正的开发网站,就前两周开始,我大二期间学习了Java,在那时,我就开始考虑以后到底要从事哪方面的职业,我的专业是物联网,说实话,我真的对这方面没兴趣,我为什么对专业没兴趣,我也曾 ...

  7. Java SE 9:使用IntelliJ IDE开发和测试模块之间的隐式可读性(第5部分)

    I have already discussed many theoretical concepts about "Java 9 Module System" and also d ...

  8. java 获取 t 的类型_如何获取类型为T的字段的类?

    我为某些SpringMVC控制器编写JUnit测试.JUnit测试的初始化对于我的所有Controllers测试都是通用的,因此我想创建一个抽象类来执行此初始化. 因此,我创建了以下代码: @RunW ...

  9. php7 匿名继承类_PHP7中的匿名类使用方法_后端开发

    PHP 微服务集群搭建 - Hyperf_后端开发 Hyperf 是基于 Swoole 4.4+ 实现的高性能.高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-F ...

最新文章

  1. vi(vim)快捷键小记
  2. gperf的学习笔记(一)
  3. Python的DataFrame多个条件过滤错误
  4. 【收藏】用户私自搭建伪服务器怎么办?禁它
  5. Transform数据权限浅析2之利用Java完成权限设置
  6. 算法设计与分析——贪心算法——活动安排问题
  7. 在 ASP.NET MVC 3 中应用 KindEditor
  8. 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角
  9. bzoj2839 集合计数
  10. 手把手教你写个ORM(一)
  11. ubuntu查看进程和结束进程
  12. Cesium:结合天地图实现中文定位
  13. 深入了解TMG企業版的獨立陣列
  14. kettle入门教程
  15. 解决手机连上电脑热点上不了网的问题
  16. news html5 qq,WebQQ全面升级支持IE9 HTML5无处不在
  17. 编程很难?很枯燥?那我们就玩起来燥起来。
  18. I3S向3DTiles数据格式的转换
  19. 大淘客CMS添加自定义友链
  20. 滴普技术荟:某工业产品内部结构尺寸图像测量和缺陷检测分析

热门文章

  1. Linux环境下创建运行.java文件
  2. mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题
  3. oracle禁止修改密码,Oracle 用户密码过期后不允许修改密码的示例代码
  4. 语音编码分类及编解码标准
  5. scrapy 中不同页面的拼接_scrapy使用技巧总结
  6. php mongo sort -1出错,mongoDB排序引起的ERROR
  7. php vo 遍历,thinkPHP简单遍历数组方法分析
  8. java阴阳师抽卡概率_《阴阳师》公布抽卡概率!看到数字我哭了
  9. 数据结构与算法(C#版)第二章 C#语言与面向对象技术(中)V1.0
  10. 【转】wpf从我炫系列1----布局控件的使用(上)