浅谈Java异常

 

1.Java异常是一个好东西,能让程序员自定义自己的异常处理程序逻辑。Java定义了一个throwable类,用于描述所以可被抛弃的东西。它有两个子类errorexception

Error指的是合法程序正常情况下无法去捕获的异常,

exception则是合理程序正常下也应该尝试着去捕获的导常。

其中exception包含checkedexceptionuncheckedexception两类。后者即runtimeexception异常,比如数组越界IndexOutOfBoundsException,空指针NullPointerException,非法参数状态IllegalStateException等。

2.一谈到java异常,也许你会想到try{}catch(Exp){}finally{}这样子的语法。

Try函数体为于业务处理,finally体将为程序执行到最后,做最后的相关处理,如文件关闭,数据库连接关闭等等。

3.异常链

如果java不存在异常链,我们将无法更新精确地定位到异常的具体位置。下面举个例子

A异常继承B异常  B异常继续C异常  C异常继承运行时异常)

publicclass ExceptionA extendsExceptionB {

      publicExceptionA() {

           System.out.println("exceptionA Construtor");

      }

      publicExceptionA(String msg) {

           super(msg);

      }

}

publicclass ExceptionB extends ExceptionC {

      publicExceptionB() {

           System.out.println("exceptionB Construtor");

      }

      publicExceptionB(String msg) {

           super(msg);

      }

}

publicclass ExceptionB extends ExceptionC {

      publicExceptionB() {

           System.out.println("exceptionB Construtor");

      }

      publicExceptionB(String msg) {

           super(msg);

      }

}

下面以除0异常为测试例子

publicclass main {

 

      /**

       * @param args

       * @throwsExceptionC

       */

      publicstaticvoid main(String[]args) throws ExceptionC {

           try{

                 second();

           }catch(ExceptionCc){

                 throw c;

           }

      }

      public  staticvoidsecond() throws ExceptionC{

           try{

                 first();

           }catch(ExceptionBxx){

                 throw xx;

           }

      }

      public  staticvoidfirst() throws ExceptionB{

           try{

                 int i=10/0;

 

           }catch(Exceptionxx){

                 thrownewExceptionA();

           }

      }

 

}

运行结果 如下图:

exceptionCConstrutor

exceptionBConstrutor

exceptionAConstrutor

Exception in thread"main" cn.zw.exception.ExceptionA

      at cn.zw.main.main.first(main.java:38)

      at cn.zw.main.main.second(main.java:25)

      at cn.zw.main.main.main(main.java:15)

 

结果很简单。

如果将上面例子两处添加异常引起的处理逻辑,如下图红色加粗字体处

 

publicclass main {

 

      /**

       * @param args

       * @throwsExceptionC

       */

      publicstaticvoid main(String[]args) throws ExceptionC {

           try{

                 second();

           }catch(ExceptionCc){

              ExceptionBb  =new ExceptionB();

              b.initCause(c);

              throw b;

           }

      }

      public  staticvoidsecond() throws ExceptionC{

           try{

                 first();

           }catch(ExceptionBxx){

                 ExceptionAa  =new ExceptionA();

                 a.initCause(xx);

                 throw a;

           }

      }

      public  staticvoidfirst() throws ExceptionB{

           try{

                 int i=10/0;

 

           }catch(Exceptionxx){

                 thrownewExceptionA();

           }

      }

 

}

执行结果如下图,定位更加精准!

Exception in thread"main" cn.zw.exception.ExceptionB

      at cn.zw.main.main.main(main.java:17)

Caused by:cn.zw.exception.ExceptionA

      at cn.zw.main.main.second(main.java:26)

      at cn.zw.main.main.main(main.java:15)

Caused by:cn.zw.exception.ExceptionA

      at cn.zw.main.main.first(main.java:37)

      at cn.zw.main.main.second(main.java:24)

      ...1 more

 

浅谈Java异常,布布扣,bubuko.com

浅谈Java异常

上一篇:很少有人知道的c++中的try块函数


下一篇:小程序实现全局转发