Java之认识异常

异常:
所谓异常是指程序在运行时出现错误时提示调用者的机制。
异常的种类有很多,不同种类的异常有不同的含义,也有不同的处理方式。
示例:

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(arr[5]);  //数组下标越界异常
    }
}

在这里插入图片描述异常的基本用法
捕捉异常基本语法:

try{
	可能出现的异常;
} catch(异常类型  异常对象) {
} finally {
	异常出口
}

try中存放可能出现异常的代码块;
catch中存放出现异常后的处理行为;
finally代码块中的代码用于处理善后工作,会在最后执行;
其中catch代码块和finally代码块可以根据具体情况可加可不加。

  1. 如果不处理异常,程序在遇到异常之后会终止运行。
public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println("====1=====");
        System.out.println(arr[5]);
        System.out.println("====2=====");
    }
}

输出结果:程序在运行到arr[5]时发生数组下标越界异常,程序终止。故只打印了有1 的输出语句,2没有正常输出。
在这里插入图片描述2. 使用try处理异常之后

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        try {
            System.out.println("====1=====");
            System.out.println(arr[5]);
            System.out.println("====2=====");
        } catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace(); //打印出现异常的调用栈
        } 
        System.out.println("调用try catch");
    }
}

输出结果:
在这里插入图片描述
由输出结果可以看出try代码块中一旦遇到异常则不会继续执行,而是执行catch代码块中的代码,catch代码块执行完毕之后,继续向下执行。

一段代码也可能出现多个异常,不同的异常有不同的处理方法,因此可以搭配多个catch代码块。示例:

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        try {
            System.out.println("====1=====");
            arr = null;
            System.out.println(arr[5]);
            System.out.println("====2=====");
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println("数组下标越界异常");
            e.printStackTrace();
        }  catch (NullPointerException e){
            System.out.println("空指针异常");
            e.printStackTrace();
        }
        System.out.println("调用try catch");
    }
}

输出结果:由于arr= null,故应捕获空指针异常
在这里插入图片描述3. finally代码块表示进行最后的善后工作
无论代码是否存在异常,finally代码块中的代码最后一定会被执行

异常处理流程

  • 程序先执行try代码块的代码;
  • 如果try代码块出现异常,结束try代码块,查看catch代码块是否有匹配的异常类型;
  • 若找到匹配的异常类型,执行catch代码块;
  • 若没有找到匹配的异常类型,就会将异常向上传递到上层调用者;
  • 无论是否找到匹配的异常类型,finally代码块都会在方法结束前执行;
  • 如果上层调用者没有匹配的异常类型则会一直向上传递;
  • 一直到main方法还是没有代码处理异常,则会将异常交给JVM处理,程序终止。

抛出异常

Java中除了一些内置类抛出异常之外,还可以手动抛出异常,使用throw关键字完成。

public class Demo1 {
    public static void main(String[] args) {
        int x = func(2,0);
        System.out.println(x);
    }

    public static int func(int x,int y){
        if (y == 0){
            throw new ArithmeticException("抛出除数为0的异常");
        }
        return x/y;
    }
}

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值