day049:异常、throws声明异常、throw抛出异常、异常的处理方式

55 篇文章 0 订阅
2 篇文章 0 订阅

接下节:day050:try...catch...常见问题、throwable的成员方法、自定义异常_ZQyyds:)的博客-CSDN博客

一、异常

1.什么是异常?

指程序出现了不正常的情况,程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止。

注:语法错误不属于异常体系中。(例如关键字大小写出错)

2.异常体系

运行时异常:例如空指针异常、数组索引越界异常等

编译时异常:例如日期格式化异常、解析异常等

3.编译时异常与运行时异常

  • 编译时异常:是指在编译成class文件时必须要处理的异常,也称为受检异常
  • 运行时异常:是指在编译成class文件不需要处理,在运行字节码文件时可能出现的异常,也成为非受检异常 

4.JVM默认处理异常的方式(异常的第一种处理方式)

  • 把异常的名称、异常原因以及异常出现的位置等信息输出在控制台
  • 将程序停止运行,哪里有异常就在哪里停止

5.throws 异常类名; :

throws 异常类名;

写在方法的定义处(小括号与大括号之间),表示声明一个异常。告诉调用者,如果调用这个方法,可能会出现xx异常,如果该方法没出现异常,则程序正常运行,若出现异常,则将该异常交给调用者处理。

public class exceDemo_01 {
    //使用throws声明异常
    public static void main(String[] args) throws ArrayIndexOutOfBoundsException {
        //交给调用者处理,而main方法的调用者是JVM虚拟机,所以还是会以JVM默认处理异常
        extracted();
    }

    private static void extracted() {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println(arr[10]);
    }
}

 (注:如果声明的异常是一个运行时异常(例如空指针异常、数组索引越界异常等),则声明的代码可以省略不写,即throws ArrayIndexOutOfBoundsException可以不写;如果声明的异常是一个编译时异常(例如日期格式化异常、解析异常等),则声明的代码必须手动写出

6.throw抛出异常、异常的第二种处理方式

(1)抛出异常的意义:

  • 在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行
  • 告诉调用者方法中出现了问题

代码示例:

public class exceDemo_02 {
    public static void main(String[] args) {
        // int [] arr={1,2,3,4,5,6};
        int[] arr = null;
        printArr(arr);//调用者接收异常,再进行处理,若自己没有处理,则继续向上抛给调用者JVM虚拟机
    }

    private static void printArr(int[] arr) {
        if (arr == null) {
            throw new NullPointerException();//当参数为null时,手动创建一个异常对象,抛给调用者
        } else {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}

(2)异常的第二种处理方式(try、catch)

格式:

try{
    可能出现异常的代码;
}catch(异常类名 变量名){
    异常的处理代码;
}

优点:使用try、catch,即使代码有异常,也可以使代码继续运行下去

代码示例:

public class exceDemo_03 {
    public static void main(String[] args) {
        // int [] arr={1,2,3,4,5,6};
        int[] arr = null;
        //使用try...catch...方式处理异常
        try {
            //可能出现异常的代码
            printArr(arr);

        }//异常类名,变量名
        catch (NullPointerException exception) {
            System.out.println("参数不能为null");
        }
        System.out.println("使用try、catch,代码可以继续运行下去");
    }

    private static void printArr(int[] arr) {
        if (arr == null) {
            throw new NullPointerException();
        } else {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZQyyds:)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值