Java-异常机制
基本概念
- 异常就是“不正常”的含义,在 Java 语言中主要指程序执行中发生的不正常情况。
java.lang.Throwable
类是 Java 语言中错误(Error)和异常(Exception)的超类。- 其中 Error 类主要用于描述Java虛拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等。
- 其中 Exception 类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,如:0作为除数。
异常的分类
java.lang.Exception
类是所有异常的超类,主要分为以下两种:
RuntimeException - 运行时异常,也叫作非检测性异常
IOEXCeption 和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能被编译器检测出来的异常。- 其中 RuntimeException类的主要子类:
ArithmeticException 类 - 算术异常
ArraylndexOutOfBoundsException 类 - 数组下标越界异常
NullPointerException - 空指针异常
ClassCastException - 类型转换异常
NumberFormatException - 数字格式异常 - 注意:
当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。
异常的避免
- 在以后的开发中尽量使用 if 条件判断来避免异常的发生。
- 但是过多的条件判断会导致程序的代码加长、臃肿,可读性差。
异常的抛出
在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者,这种> 方法就叫异常的抛出。当方法执行时出现异,则底层生成一个异常类对象抛岀,此时异常代码后续的代码就不再执行。
语法格式
- 访问权限返回值类型方法名称(形参列表) throws异常类型1,异常类型2…(方法体;}
如:
public void show() throws IOException{}
-
方法重写的原则
a.要求方法名相同、参数列表相同以及返回值类型相同,从 jdk1.5 开始支持返回子类类型。
b.要求方法的访问权限不能变小,可以相同或者变大。
c.要求方法不能抛出更大的异常。 -
注意:
子类重写的方法不能抛出更大的异常、不能抛出平级不一样的异常,但可以抛出一样的异常、更小的异常以及不抛出异常 -
建议
- 若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理。
- 若鄙又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出的方法处理到最后一层进行捕获方式处理。
自定义异常
当需要在程序中表达年龄不合理的情况时,而ava官方又没有提供这种针对性的异常,此时就需要程序员自定义异常加以描述
- 实现流程
- 自定义 XXXException 异常类继承 Exception 类或者其子类。
- 提供两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法。
- 异常的产生
throw new异常类型(实参)
如:throw new AgeException("年龄不合理!!!");
- Java釆用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。