基本概念
- 异常就是"不正常"的含义,在Java语言中主要重程序执行中发生的不正常情况
java.lang.Throwable
类是Java语言中错误Error和异常Exception的超类Error
类主要用于描述Java虚拟机无法解决的严重错误.通常无法编码解决.如JVM挂掉了Exception
类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决.如:0作为除数等
异常的分类
java.lang.Exception
类是所有异常的超类.主要分为以下两种RuntimeException
-运行时异常,也叫作非检测性异常IOException
和其它异常-其它异常,也叫作检测性异常.所谓检测性异常就是指在编译阶段都能被编译器检测出来的异常
RuntimeException
类的主要子类
ArithmeticException
类 - 算术异常ArrayIndexOutOfBoundsException
类 - 数组下标越界异常NullPointerException
类 - 空指针异常ClassCastException
类 - 类型转换异常NumberFormatException
类 - 数字格式异常
异常的避免
- 尽量使用
if
条件判断来避免异常的发生 - 但过多的
if
条件判断会导致程序的代码加长,臃肿,可读性差
异常的捕获
语法格式
try{
编写可能发生异常的代码;
}
catch(异常类型 引用变量名){
编写针对该类异常的处理代码;
}
...
finally{
编写无论是否发生异常都要执行的代码;
}
注意事项
- 当需要编写多个
catch
分支时,切记小类型应该放在大类型的前面 finally
通常用于进行善后处理,如:关闭已经打开的文件等
执行流程
try{
a;
b; // 可能发生异常的语句
c;
}catch(Exception e){
d;
}finally{
e;
}
- 若没有发生异常,执行流程是: a, b, c, e
- 若发生异常,执行流程是: a, b, d, e
异常的抛出
基本概念
在某些特殊情况下, 有些异常不能处理或不便于处理时, 就可以将该异常转移给该方法的调用者, 这种方法就叫异常的抛出.
当方法执行时出现异常, 则底层生成一个异常类对象抛出, 此时异常代码后续的代码就不再执行
语法格式
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1, 异常类型2, ... {方法体;}
public void show() throws IOException{}
方法重写的原则
- 要求方法名相同, 参数列表相同, 以及返回值类型相同.从jdk1.5开始支持返回子类类型
- 要求方法的访问权限不能变小, 可以相同或者变大
- 要求方法不能抛出更大的异常
注意
子类重写的方法不能抛出更大的异常, 不能抛出平级不一样的异常, 但可以抛出一样的异常, 更小的异常, 以及不抛出异常
经验分享
- 若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理
- 若一个方法内部又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出的方法处理到最后一层进行捕获方式处理
自定义异常
基本概念
当需要在程序中表达年龄不合理的情况时, 而Java官方又没有提供这种针对性的异常, 此时就需要程序员自定义异常加以描述
实现流程
- 自定义
xxxException
异常类, 继承Exception
类或者子类 - 提供两个版本的构造方法: 一个是无参构造方法, 另外一个是字符串作为参数的构造方法
异常的产生
throw new 异常类型(实参)
在需要抛出异常的加入上述语句即可.
如throw new AgeException("年龄不合理");
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。