10. 异常处理 java

异常处理

1.    所有的异常父类为java.lang.Throwable类,它派生了两个子类,Error类和Exception类。只有throwable体系才有可抛性,能被throws与throw处理。

2.    Error类被认为是不能回复的严重错误,如系统内部错误、资源耗尽错误等,这种错误不应抛出,而是直接让程序中断为好。

Exception类定义了可能遇到的轻微错误,主要分为RuntimeException类和非运行异常。

3.    Error与RuntimeException为免检异常,java不希望对其进行处理,希望程序直接结束。其他异常为必检异常,可对其进行捕获处理,java编译时要对其进行检测。免检异常不需要在方法上进行声明(因为JVM默认每条语句都自动抛出免检异常)。

4.    处理异常有两种方法,一种方法通过try..catch..finally语句,捕获异常,并调用方法处理它。另一种方法是被调用的方法自己不处理异常,该异常被抛出。

5.    throw语句与return语句效果相同,都会将方法返回。

6.    程序中出现的异常都以某个异常类的实例形式存在。

7.    Try..catch..finally语句

         Try{..}catch(Exception1e){..}catch(Exception2 e){..}..finally{..}

         注:如果try语句中没有异常,那么程序跳过catch语句,执行finally语句。

                如果try语句中有异常,则转到相应catch语句处理,然后执行finally语句

                 在用多层catch语句捕获异常时,应将父类异常往后放。

                  除了System.exit(0)情况以外,finally语句一定执行。

8.    finally语句一定会执行(除exit(0)情况),一般用于释放资源。

9.    抛出异常

        a.系统自动抛出的异常

               所有系统定义的运行错误异常由系统自动的抛出,即一旦出现这些错误,系统会自动的产生对应异常类的实例。

        b.使用throws语句抛出异常

           格式:[修饰符]返回类型 方法名(参数列表)throws 异常列表(“,”隔开){

                 throw 异常实例;}

               注:a. 一般情况下,这种抛出语句应在某种条件满足时执行,经常与if语句合用。

                        Eg: if(i=0) throw (new MyException());

                       b. 如果A方法调用了可能会产生异常的B方法,则也应该在A方法上进行异常声明。 VoidA() throws MyException{ B();}

                       c.可在catch语句中继续抛出异常,交由后面的catch语句或系统来处理。

                       d.声明异常用throws,抛出异常用throw

10. 自定义异常

格式:class 异常类名 extends Exception{类体}

注:异常类和普通类一样,可以有成员变量、方法,能对变量进行操作。

一般使用throw new异常类(参数)语句来抛出异常。

11. 对于多线程程序(如GUI),如果一个线程发生异常没有得到处理,该线程终止,但是该程序中的其他线程不受影响。

12. 构造方法也可抛出异常。

13. 方法覆盖时异常的特点:子类只能抛出父类异常的子集,子类,本身或者不抛异常。

14. 慎用异常:因为异常处理需要初始化新的异常对象,会浪费更多时间和资源,应该用判断语句测试简单异常,而用异常处理去处理那些if不能解决的情况。

15. 断言(用于保证程序的正确性)

关键字:assert

16. 常见异常

a.    ClassCastException    类型转换异常 (java.lang)

b.    ClassNotFoundException 未找到相应类异常(java.lang)

c.    ArithmeticException         算数异常(java.lang)

d.    ArrayIndexOutOfBoundsException       数组下标越界异常(java.lang)

e.    SQLException           操作数据库异常(java.sql)

f.     NullPointerException        空指针异常(java.lang)

g.    NosuchFieldException       字段未找到异常(java.lang)

h.    NoSuchMethodException  方法未找到异常(java.lang)

i.      NumberFormatException  字符串转为数字异常(java.lang)

j.     NegativeArraySizeException      数组长度为负数异常(java.lang)

k.    StringIndexOutOfBoundsException 字符串索引超范围异常(java.lang)

l.      IOException        输入输出异常(java.io)

m.  IllegalAccessException     非法访问异常(java.lang)

n.    EOFException                 文件已结束异常(java.io)

o.    FileNotFoundException     文件未找到异常(java.io)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值