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文件,或是数据库存放,相应的也要进行改造,主要是获取原始信息和格式化后显示,这里只提供一种思路。

?

?

?

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。