本文共 3174 字,大约阅读时间需要 10 分钟。
结论:
如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数:public Throwable(String message) { fillInStackTrace(); detailMessage = message; }
或
public Throwable(String message, Throwable cause) { fillInStackTrace(); detailMessage = message; this.cause = cause; }
public Throwable(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:
package exception;/*2015-8-22*/public class ExceptionChain { public static void main(String[] args) { Business business = new Business(); try { business.doBusiness(); } catch (ProcessorException e) { System.out.println(e.getMessage()); System.out.println("e:\n" + e); } }}class Business { public void doBusiness() throws ProcessorException { try { process1(); } catch (Exception e) { throw new ProcessorException(e); // throw new ProcessorException(e.getMessage(), e); // throw new ProcessorException(e.getMessage()); } } private void process1() throws ProcessorException { try { process2(); } catch (Exception e) { // throw new ProcessorException(e.getMessage(), e); // throw new ProcessorException(e.getMessage()); throw new ProcessorException(e); } } private void process2() { throw new IllegalArgumentException("Failt to process"); }}class ProcessorException extends Exception { private static final long serialVersionUID = -4270191862690602942L; public ProcessorException(Throwable cause) { super(cause); } public ProcessorException(String message) { super(message); } public ProcessorException(String message, Throwable cause) { super(message, cause); }}
public Throwable(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. * * @return a reference to thisThrowable
instance. * @see java.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:public Throwable(String message, Throwable cause) { fillInStackTrace(); detailMessage = message; this.cause = cause; }
在输出时获取的detailMessage是:
Failt to process
Exception信息的输出:
exception.ProcessorException: Failt to process
code:
操作方式与2相同转载地址:http://ltaga.baihongyu.com/