Java异常的处理 try-catch-finally

什么是异常

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

import java.util.Scanner;

public class Except01 {

    //这是一个main方法,是程序的入口:
    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);
    }

}

在这里插入图片描述

通过if-else处理异常

import java.util.Scanner;

public class Except02 {
    //这是一个main方法,是程序的入口:
    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类型的数据!");
        }
    }
}

在这里插入图片描述

用if-else堵漏洞的缺点

  1. 代码臃肿,业务代码和处理异常的代码混在一起。
  2. 可读性差
  3. 程序员需要花费大量的经历来维护这个漏洞
  4. 程序员很难堵住所有的漏洞。

try-catch

在Java中,try-catch语句用于处理异常。当程序中可能出现异常时,可以使用try-catch语句来捕获并处理这些异常,以避免程序崩溃或出现不可预料的行为。

try-catch语句的基本语法如下:

try {
    // 可能会抛出异常的代码块
} catch (ExceptionType1 e1) {
    // 处理异常类型为ExceptionType1的代码块
} catch (ExceptionType2 e2) {
    // 处理异常类型为ExceptionType2的代码块
}

在try代码块中,编写可能会抛出异常的代码。如果在try代码块中发生异常,控制流将转到相应的catch代码块。每个catch代码块处理一种特定的异常类型。如果没有找到匹配的catch代码块,则程序将终止。

import java.util.Scanner;

public class Except03 {
    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("对不起,你的代码有问题!");
            //第三种处理:打印异常信息:
            /*(1)调用toString方法,显示异常的类名(全限定路径)*/
            /*System.out.println(ex);
            System.out.println(ex.toString());*/
            /*(2)显示异常描述信息对应的字符串,如果没有就显示null
            System.out.println(ex.getMessage());*/
            /*(3)显示异常的堆栈信息:将异常信息捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常*/
            /* ex.printStackTrace();*/
            //第四种处理:抛出异常:
            throw ex;
        }
        System.out.println("----谢谢你使用计算器");
    }
}

第一种处理

在这里插入图片描述

第二种处理

在这里插入图片描述

第三种处理

在这里插入图片描述

第四种处理

在这里插入图片描述

try-catch-finally

除了try-catch语句之外,还可以使用finally代码块来确保无论是否发生异常,都会执行某些操作。finally代码块的语法如下:

try {
    // 可能会抛出异常的代码块
} catch (ExceptionType1 e1) {
    // 处理异常类型为ExceptionType1的代码块
} catch (ExceptionType2 e2) {
    // 处理异常类型为ExceptionType2的代码块
} finally {
    // 无论是否发生异常都会执行的代码块
}


import java.util.Scanner;

public class Except04 {
    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);
            System.exit(0);//终止当前的虚拟机执行
            return;
        }catch(ArithmeticException ex){
            throw ex;
        }finally {
            System.out.println("----谢谢你使用计算器");
        }
    }
}

在这里插入图片描述
在这里插入图片描述

System.exit(0);//终止当前的虚拟机执行

它可以让finally中代码不执行

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CyberSecure

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

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

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

打赏作者

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

抵扣说明:

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

余额充值