调用栈异常信息格式

异常对象表示格式
	类全路径名[: 具体错误信息]
调用栈异常元素的表示格式
	类全路径名.方法名(文件名:行号)

printStackTrace()工作：
1，输出当前异常实例的字符串表示
	类全路径名[: 具体错误信息]
2，试着输出当前异常实例的调用栈信息
	at 类全路径名.方法名(文件名:行号)
	...
3，试着输出当前所有可禁用的异常列表信息
	Suppressed: 类全路径名[: 具体错误信息]
	at 类全路径名.方法名(文件名:行号)
	...
4，试着递归地输出当前异常的所有父异常的相关异常信息
Caused by: 类全路径名[: 具体错误信息]
	at 类全路径名.方法名(文件名:行号)
	...
	[... ${framesInCommon} more]
...

了解这些的主要益处：
通过异常信息反推程序发生异常时的一些状态，便于快速还原异常现场。


[示例]
Exception in thread "main" com.lang.UserCustomException:
java.util.concurrent.ExecutionException: java.lang.NullPointerException
	at com.lang.ExceptionTest.main(ExceptionTest.java:37)
Caused by: java.util.concurrent.ExecutionException:
java.lang.NullPointerException
	at com.lang.ExceptionTest.main(ExceptionTest.java:38)
Caused by: java.lang.NullPointerException
	... 1 more
通过上面这些异常信息可知，发生UserCustomException异常是由ExecutionException导致的，而发生ExecutionException异常又是由NullPointerException导致的（第一个Caused
by: ），而这次的异常根源是NullPointerException（见最后一个Caused by: ）。