韩顺平第十章第十一章总结

异常处理

异常入门

try-catch增加健壮性

快捷键ctrl+alt+t

如果进行了异常处理,即使出现了异常,程序可以继续执行

e.getMessage()看着会舒服很多

程序不正常的情况,逻辑错误不是

两类异常

  • error, OOM, 栈溢出
  • exception, 可以针对性处理
    • 运行时异常,运行过程中的异常
    • 编译时异常,编译器检查出的异常

异常体系图

在这里插入图片描述

小结

  1. 异常分两类,运行异常和编译时异常
  2. 运行时异常是逻辑错误,编译器检查不出来
  3. 编译时异常是必须要处理的异常

常见运行时异常

  1. NumberFormatException 字符串转数值类型时, 如果不能转换成适当形式, 抛出异常
  2. NullPointerException需要对象的地方使用null时报错
  3. ArithmeticException
  4. ArrayIndexOutOfBoundsException数组越界
  5. ClassCastException类转型异常

编译异常

了解就行

  • SQLException 数据库异常
  • IOException 没找到文件

异常处理方式

  1. try-catch-finally

在这里插入图片描述

没有finally语法也可以通过

如果异常发生, 则异常后面不会执行,直接进入catch

finally 释放资源

可以有多个catch, 要求父类异常在后, 子类异常在前, 只匹配一个catch

  1. throws

在这里插入图片描述

  1. 可以进行try-finally 配合使用, 直接做善后工作, 执行一段代码, 不管是否发生异常, 都必须执行某个业务逻辑.

总结

  1. 如果没有异常,执行try中所有语句,不执行catch, 最后要执行finally
  2. 如果出现异常, 则try块中异常发生后, try块剩下的语句不再执行, 将执行catch块中的语句, 如果有finally,最后还要执行finally中的语句.

如果用户输入的不是整数, 反复提醒输入整数

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    while (true) {
        try {
            String next = scanner.next();
            int i = Integer.parseInt(next);
            System.out.println("输入的整数是 " + i);
            break;
        } catch (Exception e) {
            System.out.println("继续输入");
        }
    }
}

throws异常处理

  1. 如果一个方法可能生成异常, 但不知道怎么处理, 应该显式声明自己处理不了, 调用者负责处理
  2. 在方法声明中使用throws可以抛出异常列表(多个异常), throws后面的异常类型可以是方法中产生的异常类型.

注意事项和细节

  1. 编译异常必须处理
  2. 运行异常, 没有处理, 默认是throws
  3. 子类重写父类方法时, 对抛出的规定. 子类重写时, 抛出的要么和父类一样, 要么时父类异常类型的子类型.
  4. throws和try-catch二选一

自定义异常

出现错误, 但是错误并没在异常体系中出现, 可以自定义异常

  1. 定义类, 继承Exception或者RuntimeException
  2. 如果继承Exception, 属于编译异常
  3. 如果继承RuntimeException, 属于运行异常(一般来说, 继承RuntimeException)
throw new AgeException("年龄需要在 18-120 之间"); // 可以通过构造器自定义信息

一般自定义异常, 继承RuntimeException, 也就是做成运行时异常, 我们可以使用默认的处理机制.

throw 和 throws 的区别

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

默认args数组中的全都是字符串

小结

  • 异常捕获的提出, 产生异常和错误, 程序会变得脆弱.
  • 异常体系图
    • 运行异常(很有可能是逻辑错误)
    • 编译异常
  • 常见的运行异常
  • 常见的编译异常
  • 异常处理方式
try {
} catch () {
} finally {
}

throws, 默认方法, 向上

  • 自定义异常, 继承RuntimeException
  • throw和throws的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值