美文网首页
Java 异常分析

Java 异常分析

作者: Tinyspot | 来源:发表于2022-08-14 19:38 被阅读0次

    Preface

    • Javadocs-printStackTrace
    • 尽早的暴露异常;忽略不必要的异常
    • 把业务流程信息记录到日志中,就可以知道程序的执行流是怎样的
    • 课程《Java异常与调优一站式解决方案》

    1. Throwable

    • 所有Throwable的子类在构造器中都可以接收一个cause对象作为参数。这个cause就用来表示原始异常,这样可以把原始异常传递给新的异常,使得即使在当前位置创建并抛出了新的异常,你也能通过这个异常链追踪到异常最初发生的位置
    • 可以接收Exception参数的构造方法 throw new BusinessRuntimeException(exception);
    // 5 个构造方法
    public Throwable() {
      fillInStackTrace();
    }
    public Throwable(String message) {
      fillInStackTrace();
      detailMessage = message;
    }
    public String getMessage() {
      return detailMessage; // 构造方法中给 message 赋值
    }
    // Subclasses may override this method in order to produce a locale-specific message
    public String getLocalizedMessage() {
      return getMessage();
    }
    public String toString() {
        String s = getClass().getName();
        String message = getLocalizedMessage();
        return (message != null) ? (s + ": " + message) : s;
    }
    public StackTraceElement[] getStackTrace() {
      return getOurStackTrace().clone();
    }
    // Throwable#printStackTrace(PrintStreamOrWriter)
    // Throwable#getOurStackTrace
    public final class StackTraceElement {
    }
    

    2. Java 虚拟机堆栈

    • 栈是限制插入和删除只能在一个位置上进行的线性表
    • 堆是一种特别的树状数据结构,是一棵完全二叉树;最大堆,最小堆
    • JVM中的堆特指用于存放Java对象的内存区域,JVM堆被同一个JVM示例中的所有Java线程共享
    • JVM栈可能会抛出的异常:StackOverflowError, OutofMemoryError
    • JVM堆可能会抛出的异常:OutofMemoryError
    • 经常说的"堆栈"指的是堆还是栈呢? 指Stack

    2.1 异常跟踪栈

    • try {} catch(Exception e) {e.printStackTrace();}
    • 异常栈组成:异常名字 + message + 路径(Tab制表符+ at 开头, first int first out)
    • 异常信息(重复的堆栈信息)被省略,N more Throwable#printEnclosedStackTrace

    相关文章

      网友评论

          本文标题:Java 异常分析

          本文链接:https://www.haomeiwen.com/subject/rrxgaltx.html