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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/380840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Larry】英语学习笔记语法篇——换一种方式理解词性

目录 一、换一种方式理解词性 1、名词、形容词、副词,这就是一切 2、词性之间的修饰关系 3、介词其实很简单 形容词属性的介词短语 副词属性的介词短语 ①修饰动词 ②修饰形容词 ③修饰其他副词 一、换一种方式理解词性 1、名词、形容词、副词&#xff0c…

Mysql Day03

多表设计 一对多 在多的一方添加外键约束,关联另外一方主键 一对一 任意一方添加外键约束,关联另外一方主键 多对多 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 idstu_idcourse_id 1 11 2 12313421524 案…

【Linux】构建模块

🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…

C++——二叉树

引入 map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构 二叉搜索树的特性了解,有助于更好的理解map和set的特性 1.二叉搜索树的概念及优缺点 1.1二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或…

网络编程-Socket套接字

目录 1.网络编程 1.1定义与图解 1.2基本概念 (1)发送端和接收端 (2)请求和响应 (3)客户端和服务端 2.Socket套接字 2.1定义 2.2分类 (1)流套接字 (2&#xff…

无人机图像识别技术研究及应用,无人机AI算法技术理论,无人机飞行控制识别算法详解

在现代科技领域中,无人机技术是一个备受瞩目的领域。随着人们对无人机应用的需求在不断增加,无人机技术也在不断发展和改进。在众多的无人机技术中,无人机图像识别技术是其中之一。 无人机图像识别技术是利用计算机视觉技术对无人机拍摄的图像…

黄金交易策略(Nerve Knife):反趋势锁定单的处理机制

锁定单是由大趋势反转之后原来的趋势单转变而来的,会在趋势再次反转时变为趋势单或者转入保留单,也有很大概率在趋势识别到转变之前就被减仓减掉了。 完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 一、锁定单怎么样来的&#xf…

Git分支常用指令

目录 1 git branch 2 git branch xx 3 git checkout xx 4 git checkout -b xx 5 git branch -d xx 6 git branch -D xx 7 git merge xx(含快进模式和冲突解决的讲解) 注意git-log: 1 git branch 作用:查看分支 示例: 2 git branch xx 作用&a…

[day0] 借着“ai春晚”开个场

1 文思ai笔记-新的开始 今天是2024年2月29日,也是传统农历的除夕夜。早起在ai圈看到一个比较新奇的消息,ai春晚今日举办,竟然有一点小小的激动。这些年确实好久没看过春晚了,自己对于春晚的映像还停留在“白云黑土”、“今天&…

RocketMQ客户端实现多种功能

目录 RocketMQ客户端基本流程 消息确认机制 1、消息生产端采用消息确认加多次重试的机制保证消息正常发送到RocketMQ 单向发送 同步发送 异步发送 2、消息消费者端采用状态确认机制保证消费者一定能正常处理对应的消息 3、消费者也可以自行指定起始消费位点 广播消息 …

Java多线程:`Thread`类

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、Thread的常见构造方法二、Thread 的常见属性三、Thread的常用方法1、start方法2、中断一个线程Ⅰ、通过共享标记Ⅱ、调用in…

大模型基础架构的变革:剖析Transformer的挑战者(下)

上一篇文章中,我们介绍了UniRepLKNet、StripedHyena、PanGu-π等有可能会替代Transformer的模型架构,这一篇文章我们将要介绍另外三个有可能会替代Transformer的模型架构,它们分别是StreamingLLM、SeTformer、Lightning Attention-2&#xff…

蓝桥杯省赛模板构建——uart

打开CubeMX 串口的发送是跟调试器放一起的,通过PA9和PA10来接收发送 选择异步通讯 波特率配置为9600 打开串口中断,因为单片机接收数据需要用到中断 生成代码 添加底层驱动代码 打开在main.h打开uart定义 uart时钟配置,由于uart是用PCLK时钟…

STM32的ADC电压采集

时间记录:2024/2/9 一、ADC相关知识点 (1)STM32的ADC时钟不要超过14MHz,不然结果的准确率将下降 (2)ADC分为规则组和注入组,规则组相当于正常运行的程序,注入组相当于中断可以打断…

飞天使-linux操作的一些技巧与知识点8-zabbix6.0 容器搭建

文章目录 安装docker安装步骤mysql下载镜像安装zabbix 使用zabbix非host模式创建 测试效果 安装docker 1. 配置官方 yum 源$ sudo yum install -y yum-utils $ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo2. 安装 Docker$ …

CSGO游戏搬砖项目靠谱吗?是不是骗人的

很多地方都在大肆宣扬说CSGO游戏搬砖项目有二三十个点的利润,但我觉得他们看待问题太片面了,没有从全局上去分析这个项目。 这些人为了能割到小白的韭菜真是无所不用其极,什么牛都能吹得出来!至少要实事求是吧,这不睁…

应用ANN+SMOTE+Keras Tuner算法进行信用卡交易欺诈侦测

目录 SMOTE: ANN:ANN(MLP) 三种预测-CSDN博客 Keras Tuner:CNN应用Keras Tuner寻找最佳Hidden Layers层数和神经元数量-CSDN博客 数据: 建模: SMOTE Sampling: Keras Tuner: SMOTE&…

【洛谷题解】B2056 求整数的和与均值

题目链接:求整数的和与均值 - 洛谷 题目难度:入门 涉及知识点:求和,平均值 题意: 输入样例: 4 344 222 343 222 输出样例: 1131 282.75000 分析:直接累加,再求平…

【Boost】:http_server模块(六)

http_server模块 一.安装cpp-httplib库二.基本使用服务器 一.安装cpp-httplib库 可以自己写一个http服务器,但比较麻烦,这里直接使用库。 在gitee上搜索cpp-httplib,任意找一个即可(建议使用0.7.15版本)。例如&#xf…

双重OSPF + OSPF综合实验

一、实验要求 1.R4为ISP,所连接的所有物理接口为公有网段,任意指定IP即可。 2.R1-2-3 构建一个星型结构的MGRE结构,其中R1为中心点,假设R1的公有IP为固定地址。 3.R1-5-6 构建另一个全连网状的MGRE网络,其中R1/5均为中…