------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
异常体系结构
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。
Exception 有一个比较特殊的异常运行时异常
异常处理
1.;jvm自己处理,把异常的名称,错误原因及异常出现的位置等信息输出在了控制台,之后程序停止执行
2.手动处理
1).try…catch…finally抓取
class Test{ void Div(int num1,int num2){ try{ //可能发生异常的代码 num1 = num1/num2;//可能发生除零异常 }catch(Exception e){ //处理部分 System.out.println("被除数不能为0"); }finally{ //必须执行的代码 } } }
2).throws抛出异常,交给上层处理
class Test{ void Div(int num1,int num2) throws Exception{ num1 = num1/num2;//可能发生除零异常 } }
异常处理的注意事项
1.声明异常时多个异常,对多个异常处理,声明几个异常对应几个catch()
2.RuntimeException不需要在函数上声明,也可以不catch
异常继承是的注意事项
1. 子类在覆盖父类时,如果父类发方法抛出异常,那么子类覆盖方法,只能抛出父类的异常或该异常的子类
2. 如果父类抛出多个异常.那么子类覆盖该方法时.只能抛出父类异常的子集
3. 父类或接口的方法中没有抛出异常.那么子类在覆盖方法时,也可以不抛出
4. 如果子类方法发生异常,就必须进行try处理,绝对不能抛出
finally
1.被finally控制的语句体一定会执行 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0)))
2.用于释放资源
final,finally,finalize的区别?
1.final用于定义常量,是关键字
2.finally{}用于标示代码块,是try...catch...finally的一部分
3.finalize()是方法,jvm回收资源的时候调用此方法
throw和throws是的区别?
1.throw:在方法体中,后面跟的是异常对象名,并且只能是一个
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
2.throws:在方法声明上,后面跟的是异常的类名,可以是多个
throws是声明方法有异常,是一种可能性,这个异常并不一定会产生