七.异常的处理

1.异常的简介

        异常,是对程序在运行过程中,遇到的种种的不正常的情况的描述。异常,在Java中,使用 Exception类来描述。如果程序遇到了未经处理的异常,将会导致程序无法编译或无法继续运行。

继承体系的层次结构,参考下图:

2.异常的处理

语法:

try {
   // 将可能会出现异常的代码放到这里执行
   // 一旦try中的代码出现了异常,则从出现异常的位置开始,到try的大括号的扩回,这一段代码就不执行了。
}catch (需要捕获的异常的类型  标识符) {
   // 如果try中的代码出现了异常,并且异常对象的类型和捕获的类型一致 
   // 这里的代码将会执行
   // 一旦一个异常被捕获了,那么这个异常将不再影响程序的编译和执行
}

案例:当除数为 0 时引发的算术异常 ArithmeticException 

public class Demo02 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 0;

        try {
            int result = divideNumbers(num1, num2);
            System.out.println("结果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("捕获到异常: 除数不能为 0");
        }
    }
    
    public static int divideNumbers(int num1, int num2) {
        return num1 / num2;
    }
}

3.多种异常的处理

 语法:

try {
   // 可能出现异常的代码
}catch (异常类型1 标识符) {
   // 针对异常类型1的处理
}catch (异常类型2 标识符) {
   // 针对异常类型2的处理
}catch (异常类型3 标识符) {
   // 针对异常类型3的处理
}

 案例:

   accessArrayElement 方法可能抛出 ArrayIndexOutOfBoundsException 异常,当访问数组越界时。readFile 方法可能抛出 IOException 异常,当文件不存在时。

public class MultipleExceptionExample {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};

        try {
            // 可能抛出数组越界异常
            int element = accessArrayElement(numbers, 5);
            System.out.println("数组元素: " + element);

            // 可能抛出文件未找到异常
            readFile("nonexistent.txt");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("捕获到数组越界异常");
        } catch (IOException e) {
            System.out.println("捕获到文件相关异常");
        } catch (Exception e) {
            System.out.println("捕获到其他未知异常");
        }
    }

    public static int accessArrayElement(int[] array, int index) {
        return array[index];
    }

    public static void readFile(String filePath) throws IOException {
        FileReader reader = new FileReader(filePath);
    }
}

4.自定义异常

如果系统给我们提供的异常类型,已经不能满足我们的需求了,或者不知道用哪个了。此时就需要进行异常的自定义。

自定义异常:

class NumberException extends RuntimeException {
    public NumberException(String message) {
        super(message);
    }
}

测试类: 

public class Demo02 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = (int)(Math.random()*10+1);

        try {
            divideNumbers(num1, num2);
        } catch (NumberException e) {
            System.out.println("捕获到异常: num2="+num2+",num1大于num2");
        }
    }
    public static void divideNumbers(int num1, int num2) {
        if(num1>num2){
            throw new NumberException("报数错误");
        }
        System.out.println("报数正确,num2="+num2);
    }
}

5.throw和throws关键字 

throw:

        用在程序方法中,表示抛出异常。一个异常对象实例化完成后,没有任何意义,只有当把这个异常抛出之后,这个异常才会生效,具有阻止程序的编译或者运行的意义。

public static void divideNumbers(int num1, int num2) {
    if(num1>num2){
        throw new NumberException("报数错误");
    }
    System.out.println("报数正确,num2="+num2);
}

throws:

        在方法的定义格式中,也就是形参列表的后面。用于声明异常类型。

public static void checkPayment(int Money,int MealCost) throws NotEnoughMoneyException{
    if(MealCost > Money){
        throw new NotEnoughMoneyException("小明没有足够的钱来支付饭钱,饭钱为"+MealCost+"元");
    }
    System.out.println("饭钱为"+MealCost+"元,小明可以支付");
}
  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值