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)显示异常描述信息对应的字符串,如果没有就显示nullSystem.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.hqwc.cn/news/463010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PWM输入输出

PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。 PWM参数 PWM 中有三个重要参数&…

IOS破解软件安装教程

对于很多iOS用户而言,获取软件的途径显得较为单一,必须通过App Store进行下载安装。 这样的限制,时常让人羡慕安卓系统那些自由下载各类版本软件的便捷。 心中不禁生出疑问:难道iOS世界里,就不存在所谓的“破解版”软件…

子域名收集神器:Subfinder 保姆级教程(附链接)

一、介绍 Subfinder 是一款专注于子域名收集的开源工具,旨在帮助安全专业人员、渗透测试人员和研究人员快速有效地发现目标域的子域名。该工具通过与多个子域名源(例如搜索引擎、DNS数据)集成,提供了一个全面的子域名搜集解决方案…

ElasticSearch之倒排索引

写在前面 本文看下es的倒排索引相关内容。 1:正排索引和倒排索引 正排索引就是通过文档id找文档内容,而倒排索引就是通过文档内容找文档id,如下图: 2:倒排索引原理 假定我们有如下的数据: 为了建立倒…

阿里云游戏服务器一年费用多少?

阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…

Android SystemConfig相关

SystemConfig在哪里初始化 它声明在PackageManagerService类的静态方法main()中。在该方法中间定义Injector类对象时,作为它的构造参数。它是调用的SystemConfig.getInstance()实现初始化,之后能通过Injector类对象的getSystemConfig()得到SystemConfig类…

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

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

【Spring】springmvc如何处理接受http请求

目录 ​编辑 1. 背景 2. web项目和非web项目 3. 环境准备 4. 分析链路 5. 总结 1. 背景 今天开了一篇文章“SpringMVC是如何将不同的Request路由到不同Controller中的?”;看完之后突然想到,在请求走到mvc 之前服务是怎么知道有请求进来…

【数据分享】1901~2022中国1km逐月潜在蒸散发数据集

大家新年好啊!今天给大伙儿分享的是1901~2022中国1km逐月潜在蒸散发数据集,收藏一下,过完年再看!当然了,如果有问题的朋友,可以添加俺微信交流。 1 数据简介 数据集为中国逐月潜在蒸散发,空间分…

机器学习系列——(二十二)结语

随着我们的机器学习系列的探索画上句号,我们不禁感慨于这一领域的广阔和深邃。从最初的基础概念到复杂的算法,从理论的探讨到实际应用的示例,我们一起经历了一段非凡的旅程。机器学习不仅是当前技术创新的核心驱动力之一,也是塑造…

第6章 智能租房——前期准备

学习目标 了解智能租房项目,能够说出项目中各模块包含的功能 熟悉智能租房项目的开发模式与运行机制,能够复述项目的开发模式与运行机制 掌握智能租房项目的创建,能够独立创建智能租房项目 掌握智能租房项目的配置,能够为智能租…

Leecode之环形链表进阶

一.题目及剖析 https://leetcode.cn/problems/linked-list-cycle-ii/description/ 这道题就是找到链表中环的入口 二.思路引入 假设起点到环的入口的距离为L, 环的长度为C, 入口到相遇点的距离为C - N 设定一个快慢指针,速度分别为2, 1 则有 (L kC - N) 2*(L C - N) 即…