获取异常信息的方法 e.toString() e.getMessage() e.printStackTrace()

  • Post author:
  • Post category:其他


https://blog.csdn.net/yamadeee/article/details/82688506

public  class TestException(){

@Test

public void test(){

try{


throw new IllegalArgumentException(“xxxxxx”);

}catch(Exception e){


System.out.println(e.toString());

System.out.println();

System.out.println(e.getMessage());

System.out.println();

e.printStackTrace();

}

}

}

输出信息:

java.lang.IllegalArgumentException: xxxxxx

xxxxxx

java.lang.IllegalArgumentException: xxxxxxx

at TestException.test(TestException.java:32)

toString() : 打印异常的名称和 创建异常对象时传入的message信息

getMessage(): 打印创建异常对象时传入的message信息

printStackTrace(): 打印 toString()方法的所有内容,并且输出错误栈信息

Throwable 类中的部分源码

toString

public String toString() {//1

String s = getClass().getName();

String message = getLocalizedMessage();//5

return (message != null) ? (s + “: ” + message) : s;

}

public String getLocalizedMessage() {//2

return getMessage();

}

public String getMessage() {//3

return detailMessage;

}

public Throwable(String message) {//4

fillInStackTrace();

detailMessage = message;

}

通过上面的源码,可以清楚的看到。toString() 打印的message 信息。就是创建异常对象时,传入的参数。

printStackTrace()

private void printStackTrace(PrintStreamOrWriter s) {


// Guard against malicious overrides of Throwable.equals by

// using a Set with identity equality semantics.

Set<Throwable> dejaVu =

Collections.newSetFromMap(new IdentityHashMap<Throwable, Boolean>());

dejaVu.add(this);

synchronized (s.lock()) {


s.println(this);          // 调用 toString

StackTraceElement[] trace = getOurStackTrace();

for (StackTraceElement traceElement : trace)   //打印错误栈

s.println(“\tat ” + traceElement);

// Print suppressed exceptions, if any

for (Throwable se : getSuppressed())

se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, “\t”, dejaVu);

// 如果存在的话,打印引起异常的原因。就是常见的  cause by

Throwable ourCause = getCause();

if (ourCause != null)

ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, “”, dejaVu);

}

}