java通过抛异常来返回提示信息
结论:
如果把通过抛异常的方式得到提示信息,可以使用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
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); } }
2、通过java.lang.Throwable中的Constructs
public Throwable(String message) { fillInStackTrace(); detailMessage = message; }
/** * Fills in the execution stack trace. This method records within this * <code>Throwable</code> object information about the current state of * the stack frames for the current thread. * * @return a reference to this <code>Throwable</code> 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相同