Java 中的异常处理机制的简单原理和应用

2020-04-19  本文已影响0人  极客天空

何为异常

异常是指 java 程序运行时(非编译)所发生的非正常情况或错误,与现实生活
中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情
节等信息,可以用一个对象来表示,Java 使用面向对象的方式来处理异常,它把
程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常
的信息。

异常分类

Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异常
的根类为 java.lang.Throwable,Throwable 下面又派生了两个子类:Error 和
Exception
1.Error
Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有
死的份了,例如,说内存溢出和线程死锁等系统问题
2.Exception
表示可恢复的异常,这是可捕捉到的.分为运行时异常,检查性异常.
也叫系统异常普通异常
系统异常:即运行时异常,是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死
掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常
(NullPointerException)、类转换异常(ClassCastException);

我们可以不处理。当出现这样的异常时,总是由虚拟机接管。
出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。
如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。
抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。
运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。
也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止

普通异常是运行环
境的变化或异常所导致的问题,检查性异常,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。

checked异常:I**O异常,以及SQL异常都是这种异常。 对于这种异常, JAVA编译器强制要求我们必需对出现的这些异常进行catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。 这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误

解决方案

java 为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须
try..catch 处理或用 throws 声明继续抛给上层调用方法处理,所以普通异常也称
为 checked 异常,而系统异常可以处理也可以不处理,所以,编译器不强制用
try..catch 处理或用 throws 声明,所以系统异常也称为 unchecked 异常

自定义异常类

在开发中根据自己业务的异常情况来定义异常类。
异常类如何定义

  1. 自定义一个编译器异常:自定义类 并继承 java.lang.Exception
  2. 自定义一个运行时期的异常类:自定义类,并继承于
    java.lang.RuntimeException。

建议:保留两种构造器的形式
①无参构造 ②带给父类的message属性赋值的构造器
语法格式:
public class XXXExcepiton extends Exception | RuntimeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法
}
注意:

(1)自定义异常类一般都是以Exception结尾,说明该类是一个异常类
(2)自定义异常类,必须的继承Exception或者RuntimeException
继承Exception:那么自定义的异常类就是一个编译期异常,如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws,要么try...catch
继承RuntimeException:那么自定义的异常类就是一个运行期异常,无需处理,交给虚拟机处理(中断处理)

上一篇下一篇

猜你喜欢

热点阅读