【www.bbyears.com--js教程】
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 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调用公共类
//Class: TestPsi
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());
}
}