Java 异常

Throwable
                     
1,程序的非正常情况。

                2,继承体系:

                          Throwable

                                |---Error

                                        |---严重的,不可拒的问题。

                                |---Exception

                                        |---非RuntimeException必须进行处理,否则编译不通过。

                                                       |---throws

                                                       |--- try()..catch(){}

                                        |---RuntimeExcetion

                                                       |---运行期问题,需要修改参数与代码逻辑。

                3,默认处理方式:

                            默认情况下,JVM会把异常的全路径、位置及原因等信息显示出来。

                            且程序中止,不会执行到下一步。

                4,格式:

                          1,try..catch..finally

//基本格式
try{
    //可能出现的问题
}catch(异常的对象){
    //对问题的处理
}finally{
    //释放资源
}

                  2,变形格式:

                              try...catch..

                              try...catch..catch

                              try...catch..catch..finally

                              try...finally

                              JDK7新特性:处理多个异常

                                        catch(ExceptionA|ExcepationB|ExcetionC...e){

                                        }   

                5,注意事项:

                             1,final,finally,finalize的特点及区别?

                                        final :是修饰符,它修饰的变量是常,它修饰的类不能被继承,它修饰的方法不能被重写。

                                        finally :是异常处理的一部分,特点是永远会被执行,特殊情况:例如在执行到finally之前退出JVM。

                                        finallize :是Object的方法,用于垃圾回收。

                             2,执行顺序:

                                       在执行try里面的代码会从上至下,如果遇到问题,就会产生一个异常对象到catch里进行匹配;

                                       有对应的匹配就走对应处理方案。

                                       没有,就向上找父类匹配,如果有就找对应处理方案。

                                       没有,JVM就会采取默认的处理方案。

                                   注意:

                                        如果有多个异常,有子父关系,父异常一定要放最后面。

                                        如果是多个异常,没有子父关系,它们所在的位置没有顺序关系。

                             3,Exception和RuntimeException的区别?  

                                            Exception:分为编译期异常和运行期异常,编译期异常是必须处理,否则编译不能通过。

                                            RuntimeException: 运行期异常。不需要写异常代码,但有可能需要修正程序参数与代码逻辑。

                             4,throws和throw的区别?

                                           throws:在方法声明上,后面跟的是异常类名。

                                                       throws后面跟的是编译期异常,调用者是必须要进行处理的。

                                                       throws后面跟的是运行期异常,调用者不需要处理,这种方式没有意义。

                                           throw:  在方法体中,后面跟的是异常对象名。

                                                       throw后面如果抛出的是运行时期异常对象,那么方法上是不需要进行声明的。

                                                       throw后面如果抛出的是编译时期异常对象,那么一般要在方法声明上用throws声明该方法有异常。

                             5,子类重写父类方法时不能抛出比父类更大的异常。

                             6,如果catch里面有return,finally还会执行吗?

                                       会执行。

                                  如果执行,是在return之前执行还是在之后执行?

                                      之前。准确的说应该在之间。

                注意:

                      能自己处理的异常,尽量自己处理。

                      在main方法里尽量不要抛异常。

                     

原文地址:https://www.cnblogs.com/zhanfuxing/p/3643987.html