您的位置:首页 > 编程语言 > Java开发

java的异常处理机制要点总结

2016-11-13 14:05 483 查看
 

 一,异常类的继承层次结构

 所有的异常都是由Throwable继承而来,在下一层立即被分解被两个分支:Error和Exception

 Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误,应用程序不能抛出这种类型的对象。如果出现了这样的内部错误,除了通知给用户,并尽力使程序安全地终止之外,再也无能为力了。

 Exception层次结构是我们应该重点关注的类,

 


 

 1.try-catch捕获异常类型的顺序:

 由子类到父类的顺序,不能错。

 在最后一个catch语句中捕获Exception异常,父类异常在子类的下面,顺序不能错,否则子类异常没有机会被处理。

异常处理方式:

 2.try-catch捕获异常和throw抛出异常的区别:

 (1)try-catch 捕获,异常由被调用者自己处理。

 (2)throw抛出异常,异常由调用者处理,谁调用谁处理, 用throw通知外界,告知方式就是throw异常,用于catch语句块中

 注意:父亲坏了,儿子不能再坏

 原则:参数原因异常应该抛出,自身原因由自己处理

 throws关键字:

 声明方法的同时声明可能抛出的异常类型,通知调用者强制捕获。

Throw和throws应该结合使用:

 Throws可以在方法声明时声明抛出的异常。原则上throws声明的异常,一定要在该方法中抛出。否则没有意义。相反的,若方法中我们主动通过throw抛出一个异常,应该在throws中声明该种类异常,通过外界捕获。

  Java异常分为:

  (1)运行时异常

 (2)可检查异常

RuntimeException:

 若方法中抛出该类异常或其子类,那么声明方法时可以不在throws中列举该类抛出的异常。不是RuntimeException类型的异常必须列举该类抛出的异常。

 NullPointerException/IndexOutOfBoundsException

抛出非RuntimeException异常,这类异常称为检查异常

编辑器在编译该类时若发现方法中抛出了此类异常。那么一定会检查方法声明是否含有throws这类异常的声明,若没有就判定为语法错误,编译不通过。

非RuntimeException—->必须检查

Main方法不抛出异常,因为mian方法后的Throws异常会交给JVM处理,而JVM会直接关闭程序。

Throws和Throw的区别(笔试常考)

 (1)throw是语句抛出一个异常。

语法:throw (异常对象);

throw e;

 (1)throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)

语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{……}

public void doA(int a) throws Exception1,Exception3{……}

Java的异常处理机制:

 Jvm在运行程序时,一旦在某行代码运行时出现了错误,jvm会创建这个错误的实例,并抛出。这时jvm会检查出错代码所在的方法块中是否有try捕获,若有,则检查catch块是否有可以处理该异常的能力。若没有,则将该异常抛出给方法的调用者。以此类推,(自动向上抛出???)直到抛至main方法仍没有解决。那么jvm会终止该程序。

 重写方法时的异常处理:

如果使用继承时,在父类的某个方法上宣告了throws某些异常,而在子类中重新定义该方法时,可以:

 (1)不处理异常,重新定义时不设定throws

 (2)可仅throws父类中被重新定义的额方法上的某些异常

 (3)可throws被重新定义的方法之上的异常的子类别

不可以:

 (1)throws出额外的异常

 (2)throws被重新定义的方法之上的异常之父类

Throwable类

程序产生的异常是Throwable类 或其子类的实例对象

Throwable有两种子类: Error类和Exception类

Exception子类:

 (1)ArithmeticException:数学运算时产生的异常

 (2)ArrayIndexOutBoundException:数组索引值小于0或者数组边界产生的异常

(3)ArrayStoreException:保存数组元素的类型不符合

(4)IllegalArgumentException:方法调用时,参数类型不同

(5)NullPointException:对象值为空

Try…catch…finally与直接throw的区别:

(1)try catch是直接处理,处理完成之后程序继续往下执行,

(2)throw则是将异常抛给它的上一级处理,程序便不往下执行了。不会再继续执行finally中的字句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息