异常处理
异常处理机制:
当程序中抛出一个异常后,程序从导致异常的代码跳出,Java虚拟机检测寻找和try关键字匹配的处理该异常的catch代码块,如果找到,将控制权交给catch块中的代码,然
后继续往下执行程序,try块中发生异常的代码不会被重新执行;如果没有找到处理该异常的代码块,在所有的finally块代码执行结束后,遇到异常的当前线程被终止
1.java异常类的层次:所有异常类的父类Throwable,Exception和error是其派生的两个子类
--Exception用来表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常;
--error表示java运行时环境出现的错误,例如:JVM内存资源耗尽
2.Exception:分为可检测性异常和非检测性异常。
--可检测性异常(编译性异常):经过编译器验证,对于声明抛出异常的任何方法,编译器将强制处理或者声明规则,不捕获这个异常,编译器就不通过,不允许编译
--非检测性异常(运行时异常):不遵循处理或者声明规则,在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否解决了这样一个异常
3.RuntimeException 是非检测性异常(属于常见的非检测性异常的父类)
4.常见的非检测性异常:
--ArithmeticException 数学异常
--ArrayIndexOutOfBoundsException 数组下标越界异常
--NullPointerException 空指针异常
--ClassCastException 类型强制转化异常
--NumberFormatException 数据格式转化异常
5.每个try语句块可以伴随一到多个catch语句,用于处理可能产生的不同异常,对于有包含关系的异常处理,子异常必须在父异常的前面,一旦子异常被捕获到,父异常将不再捕获
6.throws关键字:如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的
7.Exception常用API
--void printStackTrace():用来跟踪异常事件发生时执行堆栈的内容
--String getMessage():返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了
--Throwable getCause():返回一个Throwable 对象代表异常原因
8.throw关键字:当程序发生错误而无法处理的时候,会抛出对于的异常对象,除此之外,在某些时刻,程序员可能想要自行抛出异常,例如在异常处理结束后,再将异常抛出,让下一层异常来处理捕捉,若想自行抛出异常就可以使用throw关键字,并生成指定的异常对象后抛出
9.自定义异常:
--所有异常都必须是 Throwable 的子类
--如果希望写一个检查性异常类,则需要继承 Exception 类
--如果你想写一个运行时异常类,那么需要继承 RuntimeException 类
10.继承中的异常处理
--当父类中的方法抛出异常时,子类中重写该方法时可以不抛出异常;或者抛出父类的部分异常(子异常);不可以抛出额外异常,或者异常类型级别大于父类的异常类型
网友评论