①异常
异常是一种Exception类型的对象,异常是多态的
java.lang.Throwable
继承关系:
Throwable--->Exception---->IOException...
RuntimeException:执行期间抛出的异常,不检查异常,不用catch,throw,但是你catch,throw了没人会阻拦你
继承关系:
RuntimeException--->ClassCastException / NullPointerException/...
在
方法的()后面声明可能会抛出的异常,
throws Exception
可以同时抛出多个异常
声明的可能会抛出的异常可以不在方法体内部出现throw,比如throws Exception1,Exeption2,方法体中可以不写throw Exception1,因为有些异常是系统自动抛出的
但是程序有可能抛出异常就一定要throws,不然编译期间就会出现错误
③调用可能抛出异常的方法
解决方案①:处理(catch掉)
可能抛出异常的部分要用try{} catch(){}包围 可以加上finally块
有try catch finally的程序代码执行顺序是这样的(经过试验):
先执行try 块,从上至下执行代码,直到遇到抛出异常的语句。
立即跳入catch块(try块抛出异常的语句后面的那部分直接被舍弃)
执行catch块内的代码
最后执行finally块的代码
try,catch,finally的四个使用规则:
try后面一定要跟catch或finally
如果try后面只有finally,那么这个方法一定要声明throws这个异常见
解决方案②
有catch或finally,则前面一定要有try
try 和catch之间不能有其他代码
finally块使程序的各部分功能划分更明确,并能避免紊乱
如果被调用的方法抛出了多种异常,那么调用的时候就要写多个catch块,注意要从小到大catch,不然小的子类的异常的catch 块永远都没有机会被使用到
比如:
try{
//...
}catch(IOException){
//...
}catch(Exception){
//...
}
解决方案②:不处理(声明throws这个异常)
如果不catch异常就要把它throws掉:
不过这不是长久之计,不能所有人都不处理异常。
如果最后main函数都不能处理这个异常,JAVA虚拟机只好死给你看:(虽然编译器不会报错)