java学习笔记17_异常

10.22

异常

异常类层次结构

java 中,异常被当做对象来处理,所有异常的顶层父类都是 java.lang.Throwable 类。

所有的异常又被分为两大类: Error 和 Exception 。

Error

代表了 Java 自身的那些不能被工程师处理的错误,比如内存耗尽、系统崩溃,这是一种人力所无法预见和掌控的因素,这类错误在 Java 中很少出现。

Exception

表示程序运行时各种可能发生的非正常事件,可以被捕获、抛出和处理,这是 Java 异常处理的核心。

分类
运行时异常(非检查异常)

运行时异常( RuntimeException ),也称非检查异常( Unchecked Exception )。包括 Error 和 RuntimeException 及其它们的子类。

Java 在编译源代码时,不会提示和发现这样的异常。所以这种异常的出现,几乎可以肯定就是代码写的有问题。

非运行时异常(检查异常)

检查异常( Checked Exception ):除了 Error 和 RuntimeException 之外所有的其它异常。

Java 强制要求工程师处理这类异常(也就是用特定的语法 try…catch…finally 捕获并处理这类异常)。

异常捕获处理

以这段代码为例。

package com.xxm.task4;

public class test4 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3};
        int num = getElement(arr, 3);
        System.out.println(num);
    }

    public static int getElement(int[] arr, int index) {
        int ele = arr[index];
        return ele;
    }
}

在这段代码中,getElement 方法可以返回数组某个索引指向的值。

main 方法中传入的参数为 3,数组只有 3 个元素,访问索引 3 对应的值会造成越界。

在实际运行中,情况是这样的:

  1. main 方法是入口
  2. 在主方法中调用 getElement 方法
  3. getElement 方法中访问 arr[3],产生异常对象:索引越界。
  4. getElement 方法中寻找异常处理逻辑,找不到,于是 JVM 把这个异常对象抛出给 getElement 方法的调用者—— main 方法。
  5. main 方法中也没有处理该异常对象的逻辑,于是继续把这个异常对象抛出给 main 方法的调用者——JVM。
  6. JVM 接收到了这个异常对象,JVM 对异常处理的逻辑,让JVM做出两件事:
    1. 把异常对象(内容、原因、位置)以红色字体打印在控制台;
    2. 中断当前正在执行的 java 程序。

这也就是为什么平时运行程序时,如果有错误会有红色报错提示,并且程序终止了。

throw关键字

作用

throw 关键字可以在指定的方法中抛出指定的异常

使用格式

throw new xxxException(“异常原因”)

注意事项:
  1. throw 关键字必须写在方法的内部
  2. throw 关键字后 new 的对象必须是 Exception 类或者 Exception 类的子类对象
  3. throw 关键字抛出指定的异常对象,就必须处理它
    • 如果throw 关键字创建的是 RuntimeException 或者是 RuntimeException 子类的对象,可以不处理,默认交给 JVM 处理(打印异常 + 中断程序)。
    • 如果throw 关键字创建的是编译异常,就必须处理这个异常,使用 throwstry ... catch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值