java中异常处理try~catch~finally介绍
1.异常:
1.1:错误和异常是两个概念:错误是需要避免的,而异常是你能预见到的并且能掌控的了
得
1.2:处理异常:用try。。。catch。。。finally
用throw,就得用throws来修饰方法名
public void sayHello() throws Exception{}这样写,如果在别的方法
中想要调用这个方法,要么用try。。catch捕获异常,要么throws
Exception交给下一个用它的方法。
1.3:try{如果这里面的语句出现错误,那么将不执行下一句,直接跳转到catch语句当中}
1.4:finally当中的语句不管怎样都会执行。就算try中和catch用return返回了,那
finally也会照样执行。
1.5:throw和throws的区别:throw:抛出异常对象。throws:修饰方法的声明。
1.6: 一个try可以跟多个catch,因为try里面的代码可能会出现许多的错误,错误的种类
或者类型是不相同的,所以可以跟多个,但是找到对应的,下面的catch就不会执行
了,就会跳出try。。catch。
1.7: 异常一般分为两大类:检查的:Exception和不检查的或者叫运行时的:
RuntimeException,这个可以不去管。
1.8: 自定义异常类:继承自Exception得类就叫做自定义异常类。
代码如下 | 复制代码 |
public class myException extends Exception{ public void printstrackance(){ } } |
1.9:
三种方法处理异常:系统自动处理,使用try~catch~finally语句,throw语句直接抛
出异常或使用throws语句间接抛出异常
5、示例
下面是示例:TestServlet 调用TestDB和TestPsi,(附代码)如果发生异常怎样最快解决程序发生的异常错误。
在整个项目的开发过程中,指定错误代码表,并分类。如PSI类,数据库异常类代码,应用异常类代码,XML异常,网络通讯异常等等;
采用自己的异常类,当遇到异常是,激发的异常携带错误类或异常方法的路径:
如:setFlag(“PSI001”);
代码如下 | 复制代码 |
throw new WhcaException(“JB:TestA M:exe1 ”+e.getMessage); |
这里:PSI001为错误代码,“JB:TestA M:exe1”为异常链,e.getMessage为异常信息。
例如:遇到错误信息列表为:JB:TestB M:exe2 JB:TestA M:exe1 java.sql.SQLException,说明TestB 的方法exe2调用TestA的方法exe1发生了操作数据库异常。则可以迅速,准确的定位到那个类那个方法发生了异常。
注:(简写)JB:JavaBean M:Method
访问数据库类
代码如下 | 复制代码 |
//Class: TestDB package corbaidl; /** * Title: * Description: * Copyright: Copyright (c) 2000 * Company: * @author * @version 1.0 */ import java.io.*; import java.sql.*; import whca.common.WhcaException; public class TestDB { private PreparedStatement pstmt =null; private Connection conn = null; private String flag; public TestDB() { } public void CreateSysMan() throws WhcaException{ try { /**@todo: CreateSysMan method*/ } catch (Exception ex) { setFlag("ORA004"); throw new WhcaException("JB:TestDB M:CreateSysMan ERR="+ex.getMessage()); } finally { cleanUpAll(); } } public void PublishCert() throws WhcaException{ try { /**@todo: PublishCert method*/ } catch (Exception ex) { setFlag("ORA005"); throw new WhcaException("JB:TestDB M:PublishCert ERR="+ex.getMessage()); } finally { cleanUpAll(); } } public void cleanUpAll() throws WhcaException { try { if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (Exception e) { throw new WhcaException("JB:RootCaDB M:cleanUpAll Exception" + e.getMessage()); } } public void setFlag(String flag) { this.flag = flag; } public String getFlag() { return flag; } } Psi调用公共类 package corbaidl;
/** * Title: * Description: * Copyright: Copyright (c) 2000 * Company: * @author * @version 1.0 */ import psi.*; import whca.common.WhcaException; public class TestPsi { private PSIJni psijni; private String flag; private int exeHandle=0; public TestPsi() { } public int exePsiInit() throws WhcaException { try { //Step 1:psijni init int ret; int handle; psijni = new PSIJni(); ret = psijni.pkiInit(); if (ret != 0) { setFlag("PSI001"); throw new WhcaException("Initialize library environment failed!"); }
//Step 2:psijni getHandle handle = psijni.getHandle(); if (handle < 0) { setFlag("PSI002"); throw new WhcaException("Get handle error"); } return handle; } catch (Exception ex) { throw new WhcaException(ex.getMessage()); } } public void exePsiEnd(int handle) throws WhcaException { try { psijni.destroyHandle(handle); psijni.pkiEnd(); } catch (Exception ex) { throw new WhcaException(ex.getMessage()); }
} |
补充:Jsp教程,Java技巧及代码