java中的异常以类和对象的方式存在
java的异常类
异常的继承结构图:
编译时异常和运行时异常都是发生在运行阶段,编译阶段是不会发生异常的
编译时异常和运行时异常区别:
编译时异常一般发生的概率比较高 相反 运行时异常发生概率比较低
编译时异常是可以做提前处理的如抛出异常和捕捉异常 而 运行时异常是不能处理的 直接结束程序
编译时异常又被成为 受检异常/受控异常
运行时异常又被成为 未受检异常/未受控异常
异常的处理方式
第一种方式:在方法声明的位置上,试用throws关键字 抛出异常
异常发生之后,如果我选择了上抛,抛给调用者,调用者需要对这个异常已经处理,如果一直抛,抛到JVM后,程序会直接停止。
throws ClassNotFoundException是抛给上一级去解决。
如果抛给上一级未解决时会发生报错。
第二种方式:试用try catch捕捉异常
try catch会判断异常,并解决异常。
异常对象的使用方法
异常对象有两个重要的处理方法:
1.获取异常简单的描述信息:exception.getMessage();
2.打印异常追踪的堆栈信息:exception.printStackTrace();
finally子句的试用
关于try catch的finally子句
在finally子句中的代码是最后执行的,并且一定会执行的,即使try语句中的代码出现了异常
finally和try必须一起试用不能单独编写
可以看到finally run是执行的 那fis.close()没报错也是执行成功的。
Java中怎么自定义异常
SUN提供的JDK内置的异常是不够用的,异常类可以自己定义。
自定义异常两步:
1.编写一个类继承Exception或者RunTimeException
2.提供两个构造方法,一个无参数一个有参数。
异常与方法覆盖
父类中的方法抛出异常后 子类重写不需要抛出异常
而且子类还可以抛出其他异常