【javaSE-异常】 try-catch-finally System.exit(0) 多重catch

异常 Exception

定义:

在程序运行过程中,发生了不正常的现象,阻止了程序的运行,称之为异常。举例:

public class Test01 {
    public static void main(String[] args) {
        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);
    }
}

输入与定义的数据类型不匹配:InputMismatchException在这里插入图片描述
除数输入为0:ArithmeticException在这里插入图片描述
在这里插入图片描述

用if-else处理异常
  1. 代码臃肿,业务代码和处理异常的代码混在一起,
  2. 可读性差
  3. 程序员需要花费大量时间精力来维护这个漏洞
  4. 程序员很难堵住所有的漏洞
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入第一个数:");
        if(sc.hasNextInt()){
            int num1 = sc.nextInt();
            System.out.println("请录入第二个数:");
            if(sc.hasNextInt()){
                int num2 = sc.nextInt();
                if(num2 == 0){
                    System.out.println("除数不能为0");
                }else{
                    System.out.println("商是:" + num1/num2);
                }
            }else{
                System.out.println("输入非int类型");
            }
        }else{
            System.out.println("输入非int类型");
        }
    }
}
try-catch捕获异常
原理:

将可能出现异常的代码放在try代码块中,将一场封装成Exception对象,被catch后面的()异常对象接收,执行catch中的代码。代码不会出现中断。

  1. try未出现异常,try代码块执行,catch代码块不执行
  2. try出现异常,try代码块不执行,catch进行捕获:
    与Exception类型匹配,走catch代码块,进行捕获
    与Exception类型不匹配,没有捕获成功,程序中断。
public class Test01 {
    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 ex){
            System.out.println("出现异常!");
        }
    }
}
catch中异常处理方式
  1. 不处理:catch代码块中什么都没有写
  2. 输出自定义信息:
    System.out.println(“出现异常!”);
  3. 打印异常信息:
    (1)调用toString方法,显示异常的类名(全限定路径)
		System.out.println(ex);
		System.out.println(ex.toString());

(2)显示异常描述信息,如果没有显示null

System.out.println(ex.getMessage());

在这里插入图片描述

(3)显示异常的堆栈信息

ex.printStackTrace();
  1. 抛出异常:
throw ex;
finally
在什么情况下try-catch后面的代码不执行
  1. throw抛出异常的情况
  2. catch中没有匹配的异常对象的类型 进行捕获
  3. try中遇到return
怎么try-catch后面的代码必须执行?

必须将执行的代码放入finally中,那么代码如论如何一定执行。

return和finally执行顺序?

先执行finally后执行return

什么代码放在finally中?

关闭数据库资源
关闭io流
关闭socket资源

有一种情况finally中不执行:

try代码块中包含:

System.exit(0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值