当前位置: 首页 > article >正文

Java异常的处理 try-catch-finally

目录

  • 什么是异常
  • 通过if-else处理异常
    • 用if-else堵漏洞的缺点
  • try-catch
      • 第一种处理
      • 第二种处理
      • 第三种处理
      • 第四种处理
  • try-catch-finally
  • System.exit(0);//终止当前的虚拟机执行

什么是异常

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中代码不执行

在这里插入图片描述


http://www.kler.cn/a/233391.html

相关文章:

  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • ssm100医学生在线学习交流平台+vue(论文+源码)_kaic
  • NAT网络工作原理和NAT类型
  • nginx配置负载均衡详解
  • 【C++】一种针对代码的连续条件检查方案,累计布尔结果
  • 如何从头开始构建神经网络?(附教程)
  • Python 字符串模块
  • “OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【下】
  • JavaWeb02-MyBatis
  • QCoro: Qt C++ 20 协程库介绍
  • 基于图像掩膜和深度学习的花生豆分拣(附源码)
  • 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (上篇)
  • uni-app x,一个纯原生的Android App开发工具
  • 【力扣】复写零,栈 + 双指针法
  • 张楠辞任抖音集团CEO;东方甄选将开服饰号;小红书新增“附近”一级入口;华为分红770亿元
  • Vue3中路由配置Catch all routes (“*“) must .....问题
  • 通过Harbor构建docker私服仓库
  • 前端使用pdf.js进行pdf文件预览的第二种方式:Viewer.html
  • Quartus工程的qsf配置约束文件介绍
  • 【C语言】一道相当有难度的指针某大厂笔试真题(超详解)
  • 106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)
  • RTE2023第九届实时互联网大会:揭秘未来互联网趋势,PPT分享引领行业新思考
  • Python基础篇_修饰符(Decorators)【下】
  • 常用的正则表达式
  • 一条 SQL 查询语句是如何执行的
  • 探索Spring Validation:优雅实现后端数据验证的艺术