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);
}
}