Java异常处理 try catch finally 多重catch 异常分类处理

Java异常处理 try catch finally 多重catch 异常分类处理

输入两个数进行求商

使用if-else语句实现实现处理异常
import java.util.Scanner;

public class Test {
   
    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        if (sc.hasNextInt()) {
   
            int firstInt = sc.nextInt();
            System.out.println("请输入第二个数:");
            if (sc.hasNextInt()) {
   
                int secondInt = sc.nextInt();
                if (secondInt == 0) {
   
                    System.out.println("除数不能为0");
                } else {
   
                    System.out.println("商:" + firstInt / secondInt);
                }
            } else {
   
                System.out.println("第二个数不是int类型的数据!");
            }
        } else {
   
            System.out.println("第一个数不是int类型的数据!");
        }
    }
}

用if-else堵漏洞的缺点:

  • 代码臃肿、可读性差,业务代码和处理异常的代码混在一起
  • 程序员需要花费大量的经历来维护这个漏洞且很难堵住所有的漏洞。
使用try-catch处理异常
public class Test {
   
    public static void main(String[] args) {
   
        try {
   
            Scanner sc = new Scanner(System.in);
            System.out.println("请录入第一个数:");
            int num1 = sc.nextInt();
            System.out.println("请录入第二个数:");
            int num2 = sc.nextInt();
            System.out.println("商:" + num1 / num2);
        } catch (Exception e) {
   
            System.out.println(e);
        }
    }
}
  • 当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常事件的代码。
  • 寻找的过程从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后Java运行时系统把当前异常对象交给这个方法进行处理。这一过程称为捕获(catch)异常。
  • 如果Java运行时系统找不到可以捕获异常的方法,则Java运行时系统终止,相应的Java程序也将退出。

原理:把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的( e )中异常对象接收;接收以后,执行catch后面的{ }里面的代码,try-catch后面的代码不受影响。

  • try中没有异常,catch中代码不执行;try中有异常,catch进行捕获
    • 如果catch中异常类型和抛出的异常类型匹配:成功捕获,执行catch中的代码
    • 如果catch中异常类型和抛出的异常类型不匹配:未成功捕获,不执行catch中的代码,程序相当于遇到了无法处理的异常,程序中断,后续代码不执行

Note:try中如果出现异常且用catch捕获成功,那么try中后续的代码是不会执行的;当然没捕获成功程序中断也不会执行。如果catch捕获异常成功,程序不会中断,那么try-catch后面的代码没有影响。

catch异常处理方式

  • 佛系处理:什么都不写,什么都不做

  • 我行我素:输出自定义异常信息

  • 中规中矩:打印异常信息

    • 调用toString方法,显示异常的类名(全限定路径)
    • 显示异常描述信息对应的字符串,如果没有就显示null
    • 显示异常的堆栈信息
  • 破罐子破摔:异常抛回

对一些特定的异常可以再使用代码补救,比如被除数为0,可以在catch中再输入一次

import java.util.Scanner;

public class Test {
   
    public static void main(String[] args) {
   
        //实现一个功能:键盘录入两个数,求商:
        try {
   
            Scanner sc = new Scanner(System.in);
            System
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SK Primin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值