异常及其处理

异常

异常的概述

​ 首先我们需要明确异常就是代表程序出现的问题。学习它不是让我们以后不出异常,而是程序出了异常后我们该如何处理。

我们来看一下整个体系

在这里插入图片描述

​ 我们先来讲一下Error,它代表系统级别的错误(属于严重错误),系统一旦出现问题,sum公司会把这些错误封装成Error对象,因此Error是给sun公司自己用的,我们开发人员不需要管他。

​ 而与我们开发相关的东西就是Exception:叫做异常,代表程序可能存在的问题,我们通常会用Exception挤一挤他的子类来封装程序出现的问题。

​ 异常又可以分为:运行时异常(RuntimeException及其子类,编译阶段不会出现异常提醒,而运行时出现的异常)和编译时异常(编译阶段就会出现异常提醒)

​ 而异常又有两个作用。其一是用来查询bug的关键参考信息;其二在于异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常的处理方式

​ 在Java中异常的处理方式主要有三种:1.JVM默认的处理方式 2.自己处理 3.抛出异常

JVM默认的处理方式

JVM默认的处理方式很简单,就是把异常的名称,异常原因及异常出现的位置等信息输出在了控制台,并且程序在此处停止执行,即异常位置下面的代码就不会再执行了

自己处理(捕获异常)

它的目的就是当发生异常时,能够让代码继续进行。我们先来用一段代码来简单演示一下:

public class 自己处理异常 {
    public static void main(String[] args){
        /*
        自己处理异常
        格式:
           try{
                可能出现异常的代码;
                } catch(异常类名 变量名){
                    异常处理代码;
                }
         好处:可以让程序继续往下走,不会停止
         */
        int[] arr={1,2,3,4,5,6};
        try{
            System.out.println(arr[10]);  //此处出现了异常,程序就会在这创建一个对应异常的对象
            System.out.println(2/0);            //new ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println("数组越界");
        } catch (ArithmeticException e){
            System.out.println("算数异常");
        }

        System.out.println("看看我执行了吗");


    }
}

抛出处理

在这里插入图片描述

用一段代码来进行演示:

public class 抛出异常 {
    public static void main(String[] args){
        int[] arr=null;
        try {
            System.out.println(max(arr));
        } catch (NullPointerException e) {
            System.out.println("空指针异常");
        } catch (IndexOutOfBoundsException e) {
            System.out.println("索引越界异常");
        }
    }
    public static int max(int[] arr){
        if(arr==null){
            System.out.println(123);
            //手动创建一个异常对象,并把异常交给方法的调用者处理,此时方法就会结束,下面的代码就不会执行
            throw new NullPointerException();
        }
        if(arr.length==0){
            throw new IndexOutOfBoundsException();
        }
        int Max=arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>Max){
                Max=arr[i];
            }
        }
        return Max;
    }
}

throw与throws

​ throw与throws首先使用的位置不同,throws写于函数的后面跟的是异常类(可以是多个异常类),让使用者知道这里可能出现的异常,可以给出异常的处理方式。

​ 而throw使用在函数内,后面跟的是具体的异常类型。throw抛出具体的异常类对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值