第十二章:通过异常来处理错误

来源:互联网 发布:酒水包装设计软件 编辑:程序博客网 时间:2024/05/18 01:53
Java的基本理念是“结构不佳的代码不能运行”(被检查的异常)

1.概念

早期语言常常具有多种错误处理模式,这些模式是通过在约定俗成的基础上。
在Java中,用强制规定的形式来消除错误处理过程中随心所欲的因素。(即为:我写的程序会报错,但是别人造成的。和我没关系)

2.基本异常

主要分类:运行时异常和编译时异常。如果能拆能在编译时处理掉,那就真的再好不过了

3.捕获时异常

理解监控区域(guarded region)的概念,它是一点可能产生异常的代码,并且后面跟着处理这些异常的代码。
try 快
捕获异常就想当于一个"事务",一旦抛出异常,事务回滚

4.创建自定义异常(继承Exception)

5.异常链

有时我们在处理异常的时又会抛出异常。此时要考虑用异常链(说白了就是组合。一个异常组合在另一个异常的构造方法中)
package com.myboy.exceptiondemo;class e1 extends Exception{}class e2 extends Exception{e2(Throwable cause){super(cause);}}class A{    public void f() throws e2{        try {            g();        } catch (e1 e) {            e.printStackTrace();//异常链            throw new e2(e);//组合        }    }    public void g() throws e1{        throw new e1();    }}public class Test1 {public static void main(String[] args) {A a=new A();try {a.f();} catch (e2 e) {e.printStackTrace();}}}

6.Java标准异常

Throwable这个Java类被用来表示任何可以作为异常被抛出的类(基类)
Error和Exception是Throwable的导出类,此处异常理解就可

7.使用finally进行清理

无论try块中异常是否抛出,它们都能得到执行。
在return 中使用finally:在return中,一定会先执行finally块中的代码
package com.myboy.exceptiondemo;class MuitpleReturns {public static String f(int i) {try {           if(i==1) return null ;} finally {           System.out.println("zhulu");}return "aa";}}public class Test2 {public static void main(String[] args) {for(int i=1;i<2;i++){MuitpleReturns.f(i);}}}//out zhulu
异常缺失:缺少最重要的异常,在特殊处理finally 里面,可能会直接忽略到某个异常
package com.myboy.exceptiondemo;class A extends Exception {@Overridepublic String toString() {return "A Level Exceptoin";}}class B extends Exception {@Overridepublic String toString() {return "B Level Exception";}}class Demo {public void demo1() throws A {throw new A();}public void demo2() throws B {throw new B();}}public class Test3 {public static void main(String[] args) {try {Demo demo = new Demo();try {demo.demo1();//} catch (A e) {//e.printStackTrace();//请问谁不会打印信息,那真是Low到爆了} finally {demo.demo2();}} catch (Exception e) {//            e.printStackTrace();System.out.println(e.toString());}}}

6.异常匹配

抛出异常的时候,异常处理系统会按照代码的书写顺序找出"最近"的处理程序。找到匹配的处理程序后,它就认为异常的大盘了处理,就不再继续查找。
注:在多个catch 中,异常的基类大小一定要有顺序,不然虽然会抛出异常,但是不会抛出具体异常信息。

7.其他处理方式

所有尝试丢失掉异常信息的代码都是有问题的代码,要承认这不是设计问题,就是垃圾代码。

原创粉丝点击