在实际开发中,我们常常遇到捕获异常的事情。捕获一个已知的异常好过捕获一个未知的异常,因为有些异常的信息我们是可以通过业务需要进行屏蔽处理的,还可以根据指定的异常进行监控处理。总之,随心所欲。。。我们想怎么样就怎么样,一切都在我们的掌控中。。。
首先,定义一个Exception的子类,实现父类的所有构造器。
/**
*
* @Description:
* @author wuyan
* @date 2015年12月30日 下午1:51:28
*/
public class MyException extends Exception {
/**
*
*/
public MyException() {
// TODO Auto-generated constructor stub
}
/**
* @param message
*/
public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
/**
* @param cause
*/
public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
/**
* @param message
* @param cause
*/
public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
/**
* @param message
* @param cause
* @param enableSuppression
* @param writableStackTrace
*/
public MyException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
}
根据业务的需要,我们会定义一个自己业务执行的接口信息,在这个接口信息中需要抛出我们自定义的异常。
所以,在这个接口的实现过程中,我们不仅要考虑业务的计算是否需要抛出异常,还要考虑由于其它因素导致的异常我们也可以很好的处理。
interface WyMessageServer{
public void sendMessage(String s) throws WyMessageException;
}
class WyMessageServerImpl implements WyMessageServer{
/* (non-Javadoc)
* @see com.aspire.bjcss.queue.WyMessageServer#sendMessage(java.lang.String)
*/
@Override
public void sendMessage(String s) throws WyMessageException {
try {
String head = s.substring(0, 3);
String body = s.substring(4, 10);
if (!head.startsWith("Wy")){
throw new WyMessageException("unknow head");
}
} catch (Exception e) {
if (e instanceof WyMessageException)
throw e ;
else {
WyMessageException ex = new WyMessageException(e.getClass().getName() + ":" +e.getMessage());
ex.setStackTrace(e.getStackTrace());
throw ex ;
}
}
}
}
测试结果:
1. 当s=Wy0001时,方法运行正常。
2. 当s=Ay0001时,方法抛出WyMessageException
3. 当s=null时,try..catch捕获NullPointException异常,经过处理后向外抛出WyMessageException