河南省建设厅网网站,英德网络推广,罗城建设局网站,全国企业信息公开系统资料不在于多#xff0c;而在于精。好资料、好书#xff0c;我们站在巨人的肩膀上前行#xff0c;可以少走很多弯路。 通过搜索引擎找到自己需要的最好最权威信息#xff0c;是一种很重要的能力。 Java源代码和官方资料Java™ Tutorials Java异常体系结构#xff0c;是一种… 资料不在于多而在于精。好资料、好书我们站在巨人的肩膀上前行可以少走很多弯路。 通过搜索引擎找到自己需要的最好最权威信息是一种很重要的能力。 Java源代码和官方资料Java™ Tutorials Java异常体系结构是一种分层/层次结构树模型。 异常的根类是 java.lang.Throwable核心数据结构/模型和实现都在于此类。了解她们对理解异常信息很关键。 其子类 java.lang.Exception、java.lang.RuntimeException、java.lang.Error 都是标签类。
java.lang.Throwable
Throwable 是异常的根类核心数据结构/模型和实现都在于此类。了解她们对理解异常信息很关键。
/*** The {code Throwable} class is the superclass of all errors and* exceptions in the Java language. Only objects that are instances of this* class (or one of its subclasses) are thrown by the Java Virtual Machine or* can be thrown by the Java {code throw} statement. Similarly, only* this class or one of its subclasses can be the argument type in a* {code catch} clause.** For the purposes of compile-time checking of exceptions, {code* Throwable} and any subclass of {code Throwable} that is not also a* subclass of either {link RuntimeException} or {link Error} are* regarded as checked exceptions.** pInstances of two subclasses, {link java.lang.Error} and* {link java.lang.Exception}, are conventionally used to indicate* that exceptional situations have occurred. Typically, these instances* are freshly created in the context of the exceptional situation so* as to include relevant information (such as stack trace data).** author unascribed* author Josh Bloch (Added exception chaining and programmatic access to* stack trace in 1.4.)* jls 11.2 Compile-Time Checking of Exceptions* since JDK1.0*/
public class Throwable implements Serializable {/*** Specific details about the Throwable.*/private String detailMessage;/*** The throwable that caused this throwable to get thrown, or null if this* throwable was not caused by another throwable, or if the causative* throwable is unknown.*/private Throwable cause this;/*** The stack trace, as returned by {link #getStackTrace()}.*/private StackTraceElement[] stackTrace UNASSIGNED_STACK;/*** The list of suppressed exceptions, as returned by {link #getSuppressed()}.*/private ListThrowable suppressedExceptions SUPPRESSED_SENTINEL;/** Caption for labeling causative exception stack traces */private static final String CAUSE_CAPTION Caused by: ;/** Caption for labeling suppressed exception stack traces */private static final String SUPPRESSED_CAPTION Suppressed: ;/*** Constructs a new throwable with the specified detail message and* cause. pNote that the detail message associated with* {code cause} is inot/i automatically incorporated in* this throwables detail message.** pThe {link #fillInStackTrace()} method is called to initialize* the stack trace data in the newly created throwable.*/public Throwable(String message, Throwable cause) {fillInStackTrace();detailMessage message;this.cause cause;}/*** Returns a short description of this throwable.* The result is the concatenation of:* ul* li the {linkplain Class#getName() name} of the class of this object* li : (a colon and a space)* li the result of invoking this objects {link #getLocalizedMessage}* method* /ul* If {code getLocalizedMessage} returns {code null}, then just* the class name is returned.*/public String toString() {String s getClass().getName();String message getLocalizedMessage();return (message ! null) ? (s : message) : s;}private void printStackTrace(PrintStreamOrWriter s) {// Guard against malicious overrides of Throwable.equals by// using a Set with identity equality semantics.SetThrowable dejaVu Collections.newSetFromMap(new IdentityHashMapThrowable, Boolean());dejaVu.add(this);synchronized (s.lock()) {// Print our stack traces.println(this);StackTraceElement[] trace getOurStackTrace();for (StackTraceElement traceElement : trace)s.println(\tat traceElement);// Print suppressed exceptions, if anyfor (Throwable se : getSuppressed())se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, \t, dejaVu);// Print cause, if anyThrowable ourCause getCause();if (ourCause ! null)ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, , dejaVu);}}}java.lang.StackTraceElement
其中 StackTraceElement 表示调用栈跟踪元素了解其核心数据结构/模型对理解异常信息也很关键。
/*** An element in a stack trace, as returned by {link* Throwable#getStackTrace()}. Each element represents a single stack frame.* All stack frames except for the one at the top of the stack represent* a method invocation. The frame at the top of the stack represents the* execution point at which the stack trace was generated. Typically,* this is the point at which the throwable corresponding to the stack trace* was created.** since 1.4* author Josh Bloch*/
public final class StackTraceElement implements java.io.Serializable {private String declaringClass;private String methodName;private String fileName;private int lineNumber;/*** Creates a stack trace element representing the specified execution* point.*/public StackTraceElement(String declaringClass, String methodName,String fileName, int lineNumber) {this.declaringClass Objects.requireNonNull(declaringClass, Declaring class is null);this.methodName Objects.requireNonNull(methodName, Method name is null);this.fileName fileName;this.lineNumber lineNumber;}/*** Returns a string representation of this stack trace element. The* format of this string depends on the implementation, but the following* examples may be regarded as typical:* ul* li* {code MyClass.mash(MyClass.java:9)} - Here, {code MyClass}* is the ifully-qualified name/i of the class containing the* execution point represented by this stack trace element,* {code mash} is the name of the method containing the execution* point, {code MyClass.java} is the source file containing the* execution point, and {code 9} is the line number of the source* line containing the execution point.* li* {code MyClass.mash(MyClass.java)} - As above, but the line* number is unavailable.* li* {code MyClass.mash(Unknown Source)} - As above, but neither* the file name nor the line number are available.* li* {code MyClass.mash(Native Method)} - As above, but neither* the file name nor the line number are available, and the method* containing the execution point is known to be a native method.* /ul* see Throwable#printStackTrace()*/public String toString() {return getClassName() . methodName (isNativeMethod() ? (Native Method) :(fileName ! null lineNumber 0 ?( fileName : lineNumber ) :(fileName ! null ? (fileName) : (Unknown Source))));}}异常日志解读示例 实践出真知识才能真正地理解 异常日志解读
com.alibaba.xxx.xxx.common.exception.ServiceException: waybill rule is null by DISTRIBUTOR_30474702at com.alibaba.xxx.xxx.biz.common.WaybillAssistUtils.getExportWaybillRuleDO(WaybillAssistUtils.java:239)第一行日志
com.alibaba.xxx.xxx.common.exception.ServiceException: waybill rule is null by DISTRIBUTOR_30474702
// 参考 java.lang.Throwable#toString
getClass().getName()com.alibaba.xxx.xxx.common.exception.ServiceException
getLocalizedMessage()detailMessagewaybill rule is null by DISTRIBUTOR_30474702第二行日志at com.alibaba.xxx.xxx.biz.common.WaybillAssistUtils.getExportWaybillRuleDO(WaybillAssistUtils.java:239)
// 参考 java.lang.Throwable#printStackTrace(java.lang.Throwable.PrintStreamOrWriter)
// StackTraceElement[] trace getOurStackTrace();
// for (StackTraceElement traceElement : trace)
// s.println(\tat traceElement);
\tat at
traceElementcom.alibaba.xxx.xxx.biz.common.WaybillAssistUtils.getExportWaybillRuleDO(WaybillAssistUtils.java:239)
// 参考 java.lang.StackTraceElement#toString
getClassName() . methodNamecom.alibaba.xxx.xxx.biz.common.WaybillAssistUtils.getExportWaybillRuleDO
getClassName()declaringClasscom.alibaba.xxx.xxx.biz.common.WaybillAssistUtils
methodNamegetExportWaybillRuleDO
( fileName : lineNumber )(WaybillAssistUtils.java:239)
fileNameWaybillAssistUtils.java
lineNumber239进阶阅读资料
Java语言规范和源代码官方资料Java™ Tutorials - https://docs.oracle.com/javase/tutorial/Java™ Tutorials 的 Lesson: Exceptions 对异常体系讲解的通俗易懂 - https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html 祝大家玩得开心ˇˍˇ
简放杭州