Java异常使用

Java异常体系很庞大(eclipse,选中Exception,按下ctrl+T可看到),在实际运用中,我们会根据需要定义自己的异常。每个自定义异常一般从名字上就能看出所要表达的类型,比如业务异常BusinessException,任务异常JobException等。异常类的主要属性一般是异常号码和异常信息参数;其中异常号码应全局唯一,通过该号码可找到对应的异常信息(异常号码和异常信息的映射可配置到properties、xml文件,枚举类或是存储到数据库,异常信息可带有占位符);而异常信息参数在运行时传入,按顺序替换异常信息中的占位符,生成最终提示信息。

 

自定义异常如下:

 

@SuppressWarnings("serial")

public class DemoException extends Exception {

 

private String exceptionNo;// 异常号码,全局唯一

private Object[] placeHolderParams = new Object[0];// 异常信息参数,按顺序替换异常信息中的占位符

 

public DemoException(String exceptionNo) {

this.exceptionNo = exceptionNo;

}

 

public DemoException(String exceptionNo, Throwable cause) {

super(cause);

this.exceptionNo = exceptionNo;

}

 

public DemoException(String exceptionNo, Object... placeHolderParams) {

this(exceptionNo);

this.placeHolderParams = placeHolderParams;

}

 

public DemoException(String exceptionNo, Throwable cause, Object... placeHolderParams) {

this(exceptionNo, cause);

this.placeHolderParams = placeHolderParams;

}

 

@Override

public String getMessage() {

return ExceptionHelper.format(this.exceptionNo, this.placeHolderParams);

}

 

@Override

public String toString() {

return this.getMessage();

}

 

}

 

这里为方便,直接使用枚举类存放异常号码和异常信息。

 

import java.text.MessageFormat;

 

public enum ExceptionHelper {

 

DEMO_EXCEPTION("888888", "发送异常了,占位符1是[{0}],,占位符2是[{1}]")

// TODO 根据需要添加

;

 

private String exceptionNo;// 异常号码,全局唯一

private String exceptionMessage;// 异常信息,可添加占位符

 

private ExceptionHelper(String exceptionNo, String exceptionMessage) {

this.exceptionNo = exceptionNo;

this.exceptionMessage = exceptionMessage;

}

 

public String getExceptionNo() {

return this.exceptionNo;

}

 

public String getExceptionMessage() {

return this.exceptionMessage;

}

 

/**

* 根据异常号码获取原始异常信息

* @param exceptionNo

* @return

*/

public static String getErrorMessage(String exceptionNo) {

for (ExceptionHelper ee : values()) {

if (ee.getExceptionNo().equals(exceptionNo)) {

return ee.getExceptionMessage();

}

}

return null;

}

 

/**

* 格式化异常信息并返回最终显示信息

* @param exceptionNo

* @param placeHolderParams

* @return

*/

public static String format(String exceptionNo, Object... placeHolderParams) {

return MessageFormat.format(getErrorMessage(exceptionNo), placeHolderParams);

}

 

}

 

然后在捕获到DemoException后,调用方法getMessage或toString即可获取到要显示的消息。

上面的代码没有把异常号码显示在信息中,如需要显示在最前面,可修改成下面:

public static String format(String exceptionNo, Object... placeHolderParams) {

return "[" + exceptionNo + "]" + MessageFormat.format(getErrorMessage(exceptionNo), placeHolderParams);

 

}

 

另外就是如果我们使用了properties、xml文件,或是数据库存放,相应的也要进行改造,主要是获取原始信息和格式化后显示,这里只提供一种思路。

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值