Java编程思想笔记八:通过异常处理错误


第8章概述

1.基本概念

异常处理步骤:

1.使用 new 在堆上创建异常对象;
2.终止当前执行路径,从当前环境弹出对异常对象的引用;
3.异常处理机制接管程序,执行异常处理程序。

抛出异常的方法:

throw new NullPointerExecption("t = null");

2.捕获异常

捕获异常方法

1.通过 try-catch 语法捕获异常;
2.catch 可以捕获具体的异常,也可以通过捕获 Exception 来捕获所有异常

try {
    // 业务逻辑,可以抛出异常
} catch(NullPointerExecption e) {       // 捕获空指针 NPE 异常
    log.error("null pointer execption...", e);
} catch(Exception e) {                  // 可捕获所有异常
    e.printStackTrace();
}

上面的程序通过 Throwable 类声明的 printStackTrace() 获取到了抛出异常处的方法调用堆栈信息并打印到控制台上。

异常匹配原则

1.抛出异常时,会按照顺序找到最近匹配该异常的处理程序进行处理;
2.不需要和异常处理程序声明的异常完全匹配,导出类的对象也可以匹配其基类的处理程序。

异常丢失

1.捕获异常后抛出另一个异常,会丢失原异常发生点的信息;
2.Error、Exception 以及 RuntimeException 异常可以把捕获的异常信息传入到构造器的 cause 对象,避免捕获异常信息丢失;
3.其他异常构造器入参没有 cause 对象,需要使用 initCause() 方法。

3.异常分类

Java 标准异常

Throwable 用来表示任何可以作为异常被抛出的类,可以分为两种类型:

  • Error:表示编译时和系统错误;
  • Exception:表示可以被抛出的基本类型。

自定义异常

class SimpleException extends Exception {}

public class InheritingExceptions {
    public void f() throw SimpleException {
        System.out.println("Throw SimpleException from f()");
        throw new SimpleException();
    }
}

public static void main(String[] args) {
    InheritingExceptions ies = new InheritingExceptions();
    try {
        ies.f();
    } catch(SimpleException e) {
        e.printStackTrace();
    }
}

4.异常的限制

1.当覆盖方法时,只能抛出在基类方法的异常说明里列出的那些异常;但是构造器不受该限制,可以抛出任何类型异常;
2.导出类构造器不能捕获基类构造器抛出的异常;
3.异常说明不属于方法类型的一部分,不能基于异常类型来重载方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红薯的Java私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值