结论:
如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数:
public Throwable(String message) {
fillInStackTrace();
detailMessage = message;
}
或
public Throwable(String message, Throwable cause) {
fillInStackTrace();
detailMessage = message;
this.cause = cause;
}
原因及代码示例:
1、通过java.lang.Throwable中的Constructs
publicThrowable(Throwable cause) {
fillInStackTrace();
detailMessage= (cause==null ? null: cause.toString());this.cause =cause;
}
在输出时获取的detailMessage是:
exception.ProcessorException: java.lang.IllegalArgumentException: Failt to process
Exception信息的输出:
exception.ProcessorException: exception.ProcessorException: java.lang.IllegalArgumentException: Failt to process
code:
packageexception;/*2015-8-22*/
public classExceptionChain {public static voidmain(String[] args) {
Business business= newBusiness();try{
business.doBusiness();
}catch(ProcessorException e) {
System.out.println(e.getMessage());
System.out.println("e:\n" +e);
}
}
}classBusiness {public void doBusiness() throwsProcessorException {try{
process1();
}catch(Exception e) {throw newProcessorException(e);//throw new ProcessorException(e.getMessage(), e);//throw new ProcessorException(e.getMessage());
}
}private void process1() throwsProcessorException {try{
process2();
}catch(Exception e) {//throw new ProcessorException(e.getMessage(), e);//throw new ProcessorException(e.getMessage());
throw newProcessorException(e);
}
}private voidprocess2() {throw new IllegalArgumentException("Failt to process");
}
}class ProcessorException extendsException {private static final long serialVersionUID = -4270191862690602942L;publicProcessorException(Throwable cause) {super(cause);
}publicProcessorException(String message) {super(message);
}publicProcessorException(String message, Throwable cause) {super(message, cause);
}
}
2、通过java.lang.Throwable中的Constructs
publicThrowable(String message) {
fillInStackTrace();
detailMessage=message;
}
/*** Fills in the execution stack trace. This method records within this
* Throwable
object information about the current state of
* the stack frames for the current thread.
*
*@returna reference to this Throwable
instance.
*@seejava.lang.Throwable#printStackTrace()*/
public synchronized native Throwable fillInStackTrace();
在输出时获取的detailMessage是:
Failt to process
Exception信息的输出:
exception.ProcessorException: Failt to process
code:
把上面示例代码中throw new ProcessorException(e.getMessage());注释去掉,把 // throw new ProcessorException(e);注释
3、通过java.lang.Throwable中的Constructs:
publicThrowable(String message, Throwable cause) {
fillInStackTrace();
detailMessage=message;this.cause =cause;
}
在输出时获取的detailMessage是:
Failt to process
Exception信息的输出:
exception.ProcessorException: Failt to process
code:
操作方式与2相同