Java-异常处理-处理RuntimeException(2/2)

news2024/11/26 9:48:11

下面有一个简单的整数除法运算程序,输入两个整数作为被除数和除数,在正常情况下,会输出两数相除的整数商。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int op1 = scanner.nextInt();
        int op2 = scanner.nextInt();
        System.out.println(op1+" / "+op2+" = "+op1/op2);
    }
}

在正常输入的情况下,运行结果如下图所示:

image.png

但是,当输入不正常时,程序将会抛出异常,比如:

1、输入的除数为0时;

2、没有按要求输入整数,而是输入字符时;

先尝试发现在上述两种输入情况下会抛出什么类型的异常;再修改上述程序,在main方法中引入异常处理,当出现上述两种异常输入情况时,都要给出错误信息提示,当:

1、输入的除数为0时,错误提示信息为:“除数不能为0”

2、没有按要求输入整数,而是输入字符时,错误提示信息为:“请输入两个整数”

输入格式:

在一行中输入两个整数相除。

输出格式:

输出相除的结果,如果发生异常,请输出异常信息。

输入样例:

在这里给出一组输入。例如:

12 4

输出样例:

在这里给出相应的输出。例如:

12 / 4 = 3

其他测试样例:

image.png

image.png

这一节,我们来看看RuntimeException:

 虽然Runtime异常是Exception的分支。显然,Exception类是受检异常。但是Java语言把RuntimeException视为一个特别分支。RuntimeException及其子类都是非受检异常。这种异常属于非受检异常,可以不抛,也可以不捕获。有时候不是因为懒,纯粹是不适合捕获。

但是,如果你愿意,我们也可以捕获?比如这道题,它要求捕获两种异常

那书接上回:

这异常的捕获是个怎么捕法?

捕获异常: 

try-catch子句理解

我们要学习一个try- catch语句

try就是尝试,catch就是抓住

try子句里面是可能产生异常的语句,catch子句就是抓住里面的异常——这就是捕获异常。

我们运行main类代码,发现它没有报错。

这道题的要求,也是让我们把原有的警告报错,换成输出语句

那我们先尝试除数为0的情况,输入

12 0

可以看到:我们触发了一个lang包下的名叫ArithmeticException的异常类。题目上要我们捕获;

try-catch代码我们直接端上来,在注释中体会它的写法

具体语法

try
{}
catch()//括号里是“异常类类型 e“,e是形参名
{}
 try {
           Scanner scanner = new Scanner(System.in);
           int op1 = scanner.nextInt();
           int op2 = scanner.nextInt();
           System.out.println(op1 + " / " + op2 + " = " + op1 / op2);
           }//可以看到Try子句里面是正常情况下完整的程序代码(也是含有可能产生异常的代码),我们使用try,意味着试试这个方法
       catch(ArithmeticException e)//我们捕获一个ArithmeticException异常类
       {
           System.out.println("除数不能为0");//{ }是对这个异常的应对,本题要求我们输出相应语句
       }

 我们再次输入 12 0

结果如期。

下一个异常的产生,需要我们先输入

c 6

 我们这次触发了一个util包下的InputMismatchException异常类,这次不是lang包了。我们需要亲自导包:import java.util.InputMismatchException;

 在try-catch子句里面,再添加一个捕获种类。(catch子句可以多个,构成try-catch-catch-...)

理解try是尝试,catch是抓异常的意思,就理解一段代码里面异常各种各种,我们catch也可以多写几个。

catch (InputMismatchException e)
       {
           System.out.println("请输入两个整数");
       }

这次又再次输入

a 7

try-catch的使用时间

相比声明抛出,try-catch是更加主动应对异常的方式。

那什么时候使用声明抛出,什么时候又使用try-catch子句呢?

通常来说,需要我们自定义的异常。比如上一章我们写的输入异常,以及小明的身体异常这样的。这种异常,希望我们对其作出合理纠正的异常,来完成本来程序的需求。-——往往设计成受检异常,即checked异常一般继承Exception,再使用try-catch子句

Error

Java其实还有另外一种Unchecked异常,叫做Error。它是指那些不可纠正或者不值得纠正的异常。这跟普通异常有明显区别,因为普通异常,是可以纠正的。比如:我们设计一个小丑表演的程序,小丑不熟练,表演无法进行。我们写个受检异常,并选择try-catch,在catch子句里让小丑多训练。但如果小丑生病请假了,那表演就无法进行了,这就是错误。

最常见的错误就是Java虚拟机错误:VirtualMachineError.包括我们熟知的StackOverflowError,往往是函数递归导致栈帧溢出,也有OutMemoryError,比如循环创建大数组,导致堆区内存不足。这种错误,我们选择直接在代码上删除或者改变代码,而不是去声明抛出,或者捕获。所以把它归为Unchecked异常。

所以关于UncheckedException

真正准确的说法就是包括:Error和运行时异常。

对于能够合理纠正的异常,我们采用Exception,特别是自己定义的类

对于纠正起来没有意义或者也不正确,不合逻辑的异常,我们让它继承RunException。

Error就别继承了,这怎么也算得上是bug了,得改(狗头)。

本题的完整代码:



import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {

       try {
           Scanner scanner = new Scanner(System.in);
           int op1 = scanner.nextInt();
           int op2 = scanner.nextInt();
           System.out.println(op1 + " / " + op2 + " = " + op1 / op2);
           }//可以看到Try子句里面是正常情况下完整的程序代码(也是含有可能产生异常的代码),我们使用try,意味着试试这个方法
       catch(ArithmeticException e)//我们捕获一个ArithmeticException异常类
       {
           System.out.println("除数不能为0");//{ }是对这个异常的应对,本题要求我们输出相应语句
       }
       catch (InputMismatchException e)
       {
           System.out.println("请输入两个整数");
       }
    }
}

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

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

相关文章

unity制作app(3)--gps定位

1.unity中定位Unity之GPS定位(高德解析)_unity gps定位-CSDN博客 代码需要稍微修改一下,先把脚本绑到一个button上试一试! 2.先去高德地图认证(app定位) 创建应用和 Key-Web服务 API | 高德地图API (ama…

【Java】HOT100 贪心算法

目录 理论基础 一、简单贪心 LeetCode455:分发饼干 二、中等贪心 2.1 序列问题 LeetCode376:摆动序列 2.2 贪心股票问题 LeetCode121:买卖股票的最佳时机 LeetCode121:买卖股票的最佳时机ii 2.3 两个维度权衡问题 LeetCode135&…

GitHub Copilot Workspace:欢迎进入原生Copilot开发环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

华为Pura70发布,供应链公司进入静默保密期

保密措施:与华为Pura70发布相关的供应链公司在产品发布前后处于静默保密期。这可能是由于华为对于手机供应链的一些信息处于保密状态,尤其是关于麒麟芯片的代工厂商等敏感信息。这种保密措施有助于保持产品的神秘感,调动用户的好奇心&#xf…

mac电脑关于ios端的appium真机自动化测试环境搭建

一、app store 下载xcode,需要登录apple id 再开始下载 二、安装homebrew 1、终端输入命令&#xff1a; curl -fsSL <https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh>如果不能直接安装&#xff0c;而是出现了很多内容&#xff0c;那么这个时候不要着急&…

MFC 列表控件修改实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载&#xff09;》 2、程序功能选中列表控件某一项&#xff0c;修改这一项的按钮由禁止变为可用&#xff0c;双击这个按钮弹出对话框可对这一项的记录数据进行修改&#xff0c;点击确定保存修改数…

《R语言与农业数据统计分析及建模》学习——数字图像处理

数字图像处理&#xff08;digital image processing&#xff09;又称计算机图像处理&#xff0c;它是指将图像信号转换成数字信号并利用数字图像处理计算机对其进行处理的过程。 常见的数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理。 R语言…

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛&#xff0c;包含计算机方向、企业信息化管理、数据处理和数据分析等&#xff0c;随着大数据、云计算、人工智能、物联网等技术的兴起&#xff0c;对能够处理复杂信息系统的专业人才需求激增&#xff0c;信息管理与信息系统就业…

数据分析:基于DESeq2的转录组功能富集分析

介绍 DESeq2常用于识别差异基因&#xff0c;它主要使用了标准化因子标准化数据&#xff0c;再根据广义线性模型判别组间差异&#xff08;组间残差是否显著判断&#xff09;。在获取差异基因结果后&#xff0c;我们可以进行下一步的富集分析&#xff0c;常用方法有基于在线网站…

Mac 安装 JDK21 流程

一、下载JDK21 访问Oracle官方网站或选择OpenJDK作为替代品。Oracle JDK从11版本开始是商业的&#xff0c;可能需要支付费用。OpenJDK是一个免费开源选项。 Oracle JDK官方网站&#xff1a;Oracle JDK Downloads OpenJDK官方网站&#xff1a;OpenJDK Downloads 这里以JDK21为…

Servlet详解(从xml到注解)

文章目录 概述介绍作用 快速入门Servelt的执行原理执行流程&#xff1a;执行原理 生命周期概述API 服务器启动&#xff0c;立刻加载Servlet对象(理解)实现Servlet方式(三种)实现Servlet接口实现GenericServlet抽象类&#xff0c;只重写service方法实现HttpServlet实现类实现Htt…

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器&#xff0c;主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下&#xff0c;原来编译到浏览…

基于 Wireshark 分析 IP 协议

一、IP 协议 IP&#xff08;Internet Protocol&#xff09;协议是一种网络层协议&#xff0c;它用于在计算机网络中实现数据包的传输和路由。 IP协议的主要功能有&#xff1a; 1. 数据报格式&#xff1a;IP协议将待传输的数据分割成一个个数据包&#xff0c;每个数据包包含有…

Ant Design助力:实现用户列表的优雅展示与管理

文章目录 概要前端讲解登录组件注册组件用户列表组件 后端讲解连接数据库db.js路由routes.jsexpress应用app.js 启动项目小结 概要 在上一篇博客&#x1f6aa;中&#xff0c;我们已经成功实现了登录注册系统的基本功能。现在&#xff0c;我们将进一步完善系统&#xff0c;实现…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

用户中心(末)

文章目录 开发用户注销前后端后端前端 补充用户注册校验逻辑前后端设计后端前端 后端代码优化封装通用返回对象封装全局异常处理全局请求日志和登录校验 TODO 前端代码优化 开发用户注销前后端 后端 当用户登录成功之后&#xff0c;我们在请求体的 session 中保存了用户的登录…

一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面

本系列博客主要记录WebRtc实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 一、创建html页面 简单添加input、button、video控件的布局。 <html><head><title>WebRTC demo</title></head><h1>…

vue2(4)之scoped解决样式冲突/组件通信/非父子通信/ref和$refs/异步更新/.sync/事件总线/provide和inject

vue2 一、学习目标1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09;2.组件通信3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09;4.进阶语法 二、scoped解决样式冲突**1.默认情况**&#xff1a;2.代码演示3.scoped原理4.总结 三、data必须是一个函数…

自动驾驶规划与控制技术解析

目录 1. 自动驾驶技术 2.定位location 3. 地图HD Map ​编辑 4 预测prediction 5 自动驾驶路径规划 6. 自动驾驶路径规划 7. 规划planning 8. 视频路径 1. 自动驾驶技术 2.定位location 3. 地图HD Map 4 预测prediction 5 自动驾驶路径规划 6. 自动驾驶路径规划 7.…

IDEA 2022.1版本开始,可以直接运行Markdown里的命令行

参照这种格式&#xff1a; shell mvn clean install注意idea支持的版本&#xff1a;是从 2022.1版本开始的。 ps&#xff1a;之前有人写过了&#xff0c;感觉很实用但是蛮多开发者不一定会知道的功能。 参考资料&#xff1a; https://www.cnblogs.com/didispace/p/16144107.h…