Java异常的处理 try-catch-finally

news2025/1/15 16:42:19

目录

  • 什么是异常
  • 通过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.coloradmin.cn/o/1442611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索未来:集成存储器计算(IMC)与深度神经网络(DNN)的机遇与挑战

开篇部分:人工智能、深度神经网络与内存计算的交汇 在当今数字化时代,人工智能(AI)已经成为科技领域的一股强大力量,而深度神经网络(DNN)则是AI的核心引擎之一。DNN是一种模仿人类神经系统运作…

【Java八股面试系列】并发编程-并发关键字,线程池

目录 并发关键字 Synchronized synchronized最主要的三种使用方式: 具体使用:双重校验锁单例模式 synchronized 底层实现原理? synchronized锁的优化 偏向锁 轻量级锁 重量级锁 Mark Word 与 Monitor 之间的关系 总结 偏向锁、轻量…

2024年【高压电工】报名考试及高压电工操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年高压电工报名考试为正在备考高压电工操作证的学员准备的理论考试专题,每个月更新的高压电工操作证考试祝您顺利通过高压电工考试。 1、【单选题】 高压电动机发生单相接地故障时,只要接地电流大于()…

苹果mac电脑如何优化系统?保持不卡顿呢

再强悍的性能和优秀的操作系统,但长时间使用后,有时也会出现卡顿的情况。为了让你的苹果电脑保持高效运行,我们将深入探讨导致电脑卡顿的原因,并提供苹果电脑如何优化系统的解决方案,帮助你优化系统。 过多的启动项 …

第十七篇【传奇开心果系列】Python的OpenCV库技术点案例示例:自适应阈值二值化处理图像提取文字

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文目录前言一、自适应阈值二值化处理图像提取文字轮廓的初步示例代码:二、扩展思路介绍三、调整自适应阈值二值化的参数示例代码四、对二值化图像进行形态学操作示例代码五、使用轮廓特征进行筛选示…

C++ 中的模型预测控制(01/2)

目录 一、说明二、MPC原理说明三、分解算法的来源并显示关键特征,四、C 实现说明五、平衡 Q 和 R六、资源下载地址 一、说明 以下文章介绍了应用模型预测控制器的简单控制系统方法。本文讨论了这种控制的基本机制,该机制适用于各种工程领域。 MPC 涉及对…

书生·浦语大模型第三课作业

基础作业: 复现课程知识库助手搭建过程 (截图) 进阶作业: 选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址&#x…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

如何在Sprint中管理UI测试?

作为iOS团队,我们编写3种类型的UI测试。如果你问这些是什么;快照、冒烟和回归测试。那么这些测试到底是什么?让我们稍微谈谈这些。 快照测试快照测试是检查UI中的某些内容是否损坏的测试。 首先,它将所需的视图图像保存在某处&am…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南,帮助您了解如何部署一个高可用的 Linux 集群: 确定需求和目标:在开始部署之前,您需要明确高可用性的定义和目标。对于一些组织而言,高…

单片机学习笔记---串口向电脑发送数据电脑通过串口控制LED

目录 串口向电脑发送数据 每隔一秒串口就发送一个递增的数给电脑 电脑通过串口控制LED 波特率的具体计算 HEX模式和文本模式 前两节是本节的理论基础,这节开始代码演示! 串口向电脑发送数据 接下来先开始演示一下串口单向发送一个数字给电脑&…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号!!!!!!! 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…

Python ABC:应用场景和示例

前言 在Python编程中,抽象基类(Abstract Base Classes,简称ABC)是一种用于定义接口和规范的强大工具。它们提供了一种方式来确保类遵循特定的约定,从而增强了代码的可读性、可维护性和可扩展性。本文将深入探讨Python…

CVE-2018-19518 漏洞复现

CVE-2018-19518 漏洞介绍 IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数。 PHP 的…

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese(simplified)中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…

2024-02-08(Flume)

1.Flume 的架构和MQ消息队列有点类似 2.Flume也可以做数据的持久化操作 在Channel部分选择使用File channel组件 3.Flume进行日志文件监控 场景:企业中应用程序部署后会将日志写入到文件中,我们可以使用Flume从各个日志文件将日志收集到日志中心以便…

Flume安装部署

安装部署 安装包连接:链接:https://pan.baidu.com/s/1m0d5O3Q2eH14BpWsGGfbLw?pwd6666 (1)将apache-flume-1.10.1-bin.tar.gz上传到linux的/opt/software目录下 (2)解压apache-flume-1.10.1-bin.tar.gz…

《小狗钱钱》读书笔记——如何看待金钱

目录 前言 作者 经典摘录 1、 了解致富的规律,一开始,必须明确金钱对你的意义 2、 梦想储蓄罐和梦想相册 3、认真去找机会 4、主人公吉娅的财富路径 5、注意财富积累本质 写在最后 前言 尽管[ 智慧是无法传授的], 但读书可以启发思路&#xff0…

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一.设置 vim 首行缩进 二.Makefile 基本语法…

Transformer的PyTorch实现之若干问题探讨(二)

在《Transformer的PyTorch实现之若干问题探讨(一)》中探讨了Transformer的训练整体流程,本文进一步探讨Transformer训练过程中teacher forcing的实现原理。 1.Transformer中decoder的流程 在论文《Attention is all you need》中&#xff0…