一.java异常类结构
常用的CheckedException
常用的RuntimeException
二.Throwable类源码
- StackTraceElement。一个final类,代表栈轨迹中的元素,一个异常可能有多个元素。
public final class StackTraceElement implements java.io.Serializable { // Normally initialized by VM (public constructor added in 1.5) private String declaringClass;//com.jyz.study.jdk.exception.ExceptionTest private String methodName;//equals private String fileName;//ExceptionTest.java private int lineNumber;//17 //可以看到 native方法lineNumber=-2 public boolean isNativeMethod() { return lineNumber == -2; } //com.jyz.study.jdk.exception.ExceptionTest.equals(ExceptionTest.java:17) public String toString() { return getClassName() + "." + methodName + (isNativeMethod() ? "(Native Method)" : (fileName != null && lineNumber >= 0 ? "(" + fileName + ":" + lineNumber + ")" : (fileName != null ? "("+fileName+")" : "(Unknown Source)"))); } }
- Throwable。java里所有错误和异常的基类。
public class Throwable implements Serializable { //异常详细信息 private String detailMessage; //初始化异常原因case为本身 private Throwable cause = this; //栈轨迹中的元素 private StackTraceElement[] stackTrace; //一般也就四个构造函数 public Throwable() { fillInStackTrace(); } public Throwable(String message) { fillInStackTrace(); detailMessage = message; } public Throwable(String message, Throwable cause) { fillInStackTrace(); detailMessage = message; this.cause = cause; } public Throwable(Throwable cause) { fillInStackTrace(); detailMessage = (cause==null ? null : cause.toString()); this.cause = cause; } //自定义异常时 可以重写此方法 public String getMessage() { return detailMessage; } //也可以重写此方法,比喻绑定国际化资源 public String getLocalizedMessage() { return getMessage(); } //if cause == null return null public Throwable getCause() { return (cause==this ? null : cause); } //构造异常链 public synchronized Throwable initCause(Throwable cause) { if (this.cause != this)//一旦通过初始化或者initCause设置了cause,就不能再次设置了 throw new IllegalStateException("Can't overwrite cause"); if (cause == this)//如果 cause 是此 throwable。(throwable 不能是它自己的 cause。) throw new IllegalArgumentException("Self-causation not permitted"); this.cause = cause; return this; } public void printStackTrace() { printStackTrace(System.err); } //先打印thia,再打印方法调用的栈轨迹,最后打印cause public void printStackTrace(PrintStream s) { synchronized (s) { s.println(this); StackTraceElement[] trace = getOurStackTrace(); for (int i=0; i < trace.length; i++) s.println("\tat " + trace[i]); Throwable ourCause = getCause(); if (ourCause != null) ourCause.printStackTraceAsCause(s, trace); } } //迭代打印cause private void printStackTraceAsCause(PrintStream s, StackTraceElement[] causedTrace) { // assert Thread.holdsLock(s); // Compute number of frames in common between this and caused StackTraceElement[] trace = getOurStackTrace(); int m = trace.length-1, n = causedTrace.length-1; while (m >= 0 && n >=0 && trace[m].equals(causedTrace[n])) { m--; n--; } int framesInCommon = trace.length - 1 - m; s.println("Caused by: " + this); for (int i=0; i <= m; i++) s.println("\tat " + trace[i]); if (framesInCommon != 0) s.println("\t... " + framesInCommon + " more"); // Recurse if we have a cause Throwable ourCause = getCause(); if (ourCause != null) ourCause.printStackTraceAsCause(s, trace); } public void printStackTrace(PrintWriter s) { //...同上 } private void printStackTraceAsCause(PrintWriter s, StackTraceElement[] causedTrace) { //...同上} public StackTraceElement[] getStackTrace() { return (StackTraceElement[]) getOurStackTrace().clone(); } //native方法获取方法调用的栈轨迹 一个Throwable的stackTrace是固定的 private synchronized StackTraceElement[] getOurStackTrace() { // Initialize stack trace if this is the first call to this method if (stackTrace == null) { int depth = getStackTraceDepth(); stackTrace = new StackTraceElement[depth]; for (int i=0; i < depth; i++) stackTrace[i] = getStackTraceElement(i); } return stackTrace; } native int getStackTraceDepth(); native StackTraceElement getStackTraceElement(int index); } }
相关推荐
这个压缩包“Java异常处理的方法和几个例子源码.rar”包含了一些示例代码,帮助开发者深入理解Java中的异常处理机制。下面我们将详细讨论这些知识点。 首先,Java异常是一种在程序运行时发生的错误,它中断了正常的...
这篇博文“Java异常框架设计”可能探讨了如何有效地利用Java的异常处理机制来构建可靠的系统。在这个讨论中,我们将深入理解Java异常的基本概念、异常分类、以及如何通过良好的框架设计提升代码的可读性和可维护性。...
5. **异常处理**:Java的异常处理机制在`java.lang.Throwable`及其子类中体现,通过源码可以理解异常的抛出、捕获和处理流程。 6. **反射机制**:`java.lang.reflect`包提供了运行时检查和操作类、接口、字段和方法...
Java异常类层次结构基于`java.lang.Throwable`,它是所有异常和错误的基类。Throwable有两个主要子类:`Exception` 和 `Error`。Exception 用于程序中常见的可恢复错误,而 Error 通常是不可恢复的严重问题,比如...
- **异常处理**:`java.lang.Throwable`及其子类,如Exception和Error,理解异常的层次结构和处理机制。 - **多线程**:`java.lang.Thread`和`java.util.concurrent`包,探究并发编程的实现,如锁、同步、线程池等...
在Java编程语言中,异常处理是一项关键特性,用于在程序执行...以上内容基于提供的标题和描述,介绍了Java异常处理的基本概念、机制和最佳实践。通过学习和理解这些知识点,开发者可以编写出更加健壮和易于维护的代码。
7. **异常处理**:`java.lang.Throwable`及其子类如`Exception`和`Error`,展示了Java异常处理的机制。源码中可以看到如何抛出、捕获和处理异常。 8. **字符串处理**:`java.lang.String`是不可变对象,其源码中有...
4. **异常处理**:Java.lang.Throwable及其子类如Exception和Error定义了异常处理机制。源码分析有助于理解异常的层次结构和如何有效地抛出、捕获和处理异常。 5. **反射API**:Java.lang.reflect允许程序在运行时...
《imooc_exception_book_java_exception_Book2_租车_源码》是针对Java异常处理的一份学习资源,其中包含了租车业务的源代码示例。通过分析这份源码,我们可以深入理解Java异常处理机制以及如何在实际项目中应用这些...
Java异常处理是Java编程中非常重要的一个概念,它关乎程序的稳定性和健壮性。在Java中,异常是程序运行时出现的不正常情况,...在实际项目中,结合PPT文档和实例源码学习,将有助于更好地掌握Java异常处理的实践应用。
《疯狂Java讲义》是Java编程领域的一本经典教材,其源码分为多个部分,这里主要探讨的是第六部分,涵盖了第11至13章的内容。这三章涉及了Java高级特性和面向对象编程的深入理解,对于进阶Java开发者来说至关重要。...
Java线程错误捕获工具CheckThread是一个用于监控和管理Java应用程序中线程异常的重要工具。在多线程编程中,由于并发执行的特性,错误处理变得复杂,有时异常可能不会立即抛出,而是隐藏在后台线程中,导致程序运行...
在Java编程语言中,异常处理是一项关键特性,用于在程序执行过程中捕获并处理错误或非正常情况。本文将深入探讨Java中的异常类处理,包括异常的分类、处理机制以及如何有效地利用源码和工具进行调试。 首先,Java中...
Java异常处理是编程中至关重要的一个环节,它帮助开发者在程序出错时捕获并处理错误,确保程序的健壮性和稳定性。以下是关于Java异常处理的一些关键知识点,以及针对30个常见Java异常的解决方案: 1. **异常体系**...
Java中的所有异常都是`java.lang.Throwable`类的子类,包括`Error`和`Exception`两大类。`Error`通常表示系统级别的问题,如虚拟机错误,开发者通常无法处理这类错误。而`Exception`是程序运行过程中可能出现的异常...
再次,JAVA源码中的异常处理和错误报告机制,如`java.lang.Throwable`及其子类,帮助我们更好地理解和处理程序运行时可能出现的问题。同时,JAVA的反射API (`java.lang.reflect`) 和注解处理器(`javax.annotation....
本篇将详细介绍如何在Android中实现全局异常捕获,并提供一个名为"CrashHandler"的完整工程源码。 首先,我们需要了解Android中的异常处理机制。在Java中,每个线程都有一个默认的`UncaughtExceptionHandler`,当...
书中可能包含一些关于异常链、try-catch-finally语句块和throwable类型的puzzlers,通过分析这些源码,我们可以学习如何优雅地处理异常,避免程序的脆弱性。 再者,集合框架是Java编程的基石,但其内部机制如果不...
- Java的异常处理机制基于`java.lang.Throwable`类及其子类,如Exception和Error。理解何时抛出异常,如何捕获和处理异常,是编写健壮代码的基础。 7. **垃圾收集(Garbage Collection)**: - 虽然JVM的垃圾收集...
Java异常体系是Java编程语言中一个至关重要的组成部分,它提供了优雅的方式来处理程序运行时可能出现的错误情况,确保程序的健壮性和可用性。异常处理机制允许开发者将正常的业务逻辑代码与错误处理代码分离,提高...