java --- 异常

目录

一、异常体系介绍

二、异常的作用

三、异常处理方式

3.1 捕获异常

2.1 灵魂一问: 如果try中没有遇到问题,如何执行?

2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行?

2.3 灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?

2.4 灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

3. 抛出异常

四、 异常中常见方法


一、异常体系介绍

Exception:叫做异常,代表程序可能出现的问题。

                     我们通常会用Exception以及他的子类来封装程序出现的问题。

运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。

                     运行时出现的异常。(如:数组索引越界异常

编译时异常:没有继承RuntimeException的异常,直接继承与Exception。

                      编译阶段就会出现异常提醒。(如:日期解析异常

二、异常的作用

  • 作用一:异常时用来查询bug的关键参考信息
  • 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调试者底层的执行情况。

三、异常处理方式

  1. JVM默认的处理方式:把异常信息以红色字体打印在控制台,并结束程序
  2. 捕获异常 try...catch:一般用在调用处,能让代码继续往下运行。
  3. 抛出异常 throw、throws:
  4. 在方法中,出现异常了。
  5. 方法就没有继续运行下去的意义了,采取抛出处理。
  6. 让该方法结束运行并告诉调用者出现了问题。

3.1 捕获异常

格式:

try{可能出现的异常代码
}
catch(异常类名 变量名){异常处理代码
}

目的:当代码出现异常时,可以让程序继续往下执行。

 public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};//System.out.println(arr[10]);try{System.out.println(arr[10]);}catch (ArrayIndexOutOfBoundsException e){System.out.println("数组越界");}System.out.println("hhhhhhhh");}
2.1 灵魂一问: 如果try中没有遇到问题,如何执行?
  • 会把try里面的所有的代码执行完毕,不会执行catch里面的代码。

注意:只有当出现了异常,才会执行catch里面的代码

这就相当于没有触发异常一样。

2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行?
  • 会写多个catch与之对应。

细节如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面。

了解性:在JDK7之后,我们可以在catch中同时捕获多个异常,中间用 | 进行隔开。

public class ExceptionDemo07 {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5 };try {System.out.println(arr[10]); // ArrayIndexOutOfBoundsExceptionSystem.out.println(2 / 0); // ArithmeticExceptionString s = null;System.out.println(s.equals("abc"));} catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界");} catch (ArithmeticException e) {System.out.println("除数不能为0");} catch (NullPointerException e) {System.out.println("空指针异常");} catch (Exception e) {//父类异常System.out.println("exception");}System.out.println("看看我执行了吗");// 索引越界// 看看我执行了吗}
}
2.3 灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?
  • 相当于try...catch代码没有执行,最终还是会交给虚拟机进行处理。
public class ExceptionDemo08 {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5 ,6};try {System.out.println(arr[10]); //ArrayIndexOutOfBoundsException// new ArrayIndexOutOfBoundsException();} catch (NullPointerException e) {System.out.println("空指针异常");}System.out.println("看看我执行了吗");}
}
2.4 灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?
  • 不会执行,直接跳转到对应的catch当中,执行catch里面的语句体。
  • 但是如果没有对应的语句体,那么还是会交给虚拟机进行处理。
public class ExceptionDemo09 {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5 ,6};try {System.out.println(arr[10]); System.out.println("看看我执行了吗...try");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界");}System.out.println("看看我执行了吗...其他代码");//索引越界//看看我执行了吗...其他代码}
}

3. 抛出异常

例子:求一个数组中的最大数

public class ExceptionDemo10 {public static void main(String[] args) {// 需求:定义一个方法求数组最大值// int[] arr = { 1, 2, 3, 4, 5 };// 以下两种数组代码无法运行int[] arr = null;int max = 0;// int[] arr = {};// 进行捕获try {max = getMax(arr);} catch (NullPointerException e) {System.out.println("空指针异常");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界异常");}System.out.println(max);}// public static int getMax(int[] arr) throws// NullPointerException,ArrayIndexOutOfBoundsException{// 都属于RuntimeException 运行时异常 可以不写public static int getMax(int[] arr) {if (arr == null) {// 手动创建一个异常对象 并把这个异常交给方法的调用者处理// 此时方法结束,下面代码不再执行throw new NullPointerException();}if (arr.length == 0) {throw new ArrayIndexOutOfBoundsException();}System.out.println("看看我执行了吗");int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}return max;}
}

四、 异常中常见方法

Throwable的成员方法:

方法名称说明
public String getMessage ( )返回此throwable的详细消息字符串
public String toString ( )返回此可抛出的简短描述
public void printstackTrace ( )把异常的错误信息输出在控制台
public class ExceptionDemo11 {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5 };try {System.out.println(arr[10]);} catch (ArrayIndexOutOfBoundsException e) {String message = e.getMessage();System.out.println(message); // Index 10 out of bounds for length 6String str = e.toString();System.out.println(str); // java.lang.ArrayIndexOutOfBoundsException:10e.printStackTrace(); // at Exception.ExceptionDemo11.main(ExceptionDemo11.java:8)// 仅仅打印信息,不会停止程序运行}System.out.println("看看我执行了吗");}
}

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

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

相关文章

安卓小练习-校园闲置交易APP(SQLite+SimpleCursorAdapter适配器)

环境&#xff1a; SDK&#xff1a;34 JDK&#xff1a;20.0.2 编写工具&#xff1a;Android Studio 2022.3.1 整体效果&#xff08;视频演示&#xff09;&#xff1a; 小练习-闲置社区APP演示视频-CSDN直播 部分效果截图&#xff1a; 整体工作流程&#xff1a; 1.用户登录&…

FPGA实现 TCP/IP 协议栈 客户端 纯VHDL代码编写 提供4套vivado工程源码和技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐我这里已有的以太网方案1G 千兆网 TCP-->服务器 方案10G 万兆网 TCP-->服务器客户端 方案常规性能支持多节点FPGA资源占用少数据吞吐率高低延时性能 4、TCP/IP 协议栈代码详解代码架构用户接口代码模块级细讲顶层模块PA…

http状态码(一)400报错

一 400报错汇总 ① 综述 一、4xx状态码报错说明&#xff1a; 客户端行为导致的报错二、通用的4xxHTTP报错1) 4002) 4013) 4034) 4045) 405 --> 不允许方法&#xff0c;可能跨域或者nginx限制请求方法6) 4087) 4138) 419三、ngin自身定义的4xx报错495、496、497、498、4…

keithley 吉时利6221源表

特点 优势 10 14 Ω 输出阻抗 提供广泛的输出阻抗&#xff0c;确保负载中有稳定的电流源。 65000 点源内存 允许直接从电流源执行全面的测试电流扫描。 输出 0.1V 至 105V 的恒流电压&#xff0c;10mV 步长 防止潜在损坏对过电压敏感的设备。 源交流电源范围为 4pA 至…

vue门户设计器实现技术方案

一、什么是门户设计器 门户设计器是一种用于创建和设计门户网站或者应用系统首页的工具。它通常是一个软件应用程序&#xff0c;可以帮助用户快速、轻松地设计和构建自己的门户网站或者应用系统的首页。门户设计器通常提供在线拖拉拽设计器&#xff0c;以及各种模板、主题和组…

LWIP源码认识记录

1、内核&#xff1a;\src\core的各源文件含义 2、demo例程与移植&#xff1a;lwip\lwip-contrib

地级市ZF工作报告文本分析-ZF数字关注度(2005-2023)

数据简介&#xff1a; 数据来源&#xff1a;各政府工作报告时间跨度&#xff1a;2005-2023年数据范围&#xff1a;安康、安庆、安顺、安阳、鞍山、巴彦淖尔、巴中、白城、白山、白银、蚌埠、包头、保山、北京、本溪、滨州、亳州、常德、常州、朝阳、潮州、郴州、成都、池州、赤…

ChatGPT如何做科研??

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车&#xff0c;就有可能被淘汰在这个数字化时代&#xff0c;如何能高效地处理文本、文献查阅、PPT…

酒精壁炉,现代取暖的便携选择

酒精壁炉作为现代室内取暖的一种选择&#xff0c;具有独特的特点和工作原理。酒精壁炉采用酒精作为燃料&#xff0c;为家庭提供舒适的温暖&#xff0c;同时具备一定的安全性和便携性。 酒精壁炉通常由金属或陶瓷制成&#xff0c;内部设有专门的燃烧器&#xff0c;用于燃烧酒精燃…

Discord Midjourney 安装使⽤教程(AI绘画)

安装步骤: 1.注册Discord账号 2.进⼊Midjourney社区创作 3.创建⾃⼰服务器 安装教程: 1.注册Discord账号 账号注册的方式&#xff1a; 注册地址: //账号注册地址https://discord.com/ 2.进⼊Midjourney社区创作 // 邀请链接: 官方的midjourneyhttps://discord.gg/midjo…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

Qt实现的聊天画面消息气泡

Qt实现的聊天画面消息气泡 采用基于QWidgetMingw实现的原生的消息气泡 通过覆写QWidget::paintEvent(QPaintEvent *event)方法&#xff0c;每当窗口尺寸变化时都会触发paintEvent事件&#xff0c;在覆写QWidget::paintEvent(QPaintEvent *event)方法中重新绘制聊天气泡在QListW…

社交网络分析5:社交网络信息传播动力学。信息传播 、传染病模型、博弈模型和物理系统模型 、传播动力学分析 、 未来发展趋势与展望

社交网络分析5&#xff1a; 写在最前面信息传播动力学研究概述信息传播信息接收信息发布信息反馈信息传播的预测与控制 信息传播动力学研究的目标 社交网络信息传播模型传播模型的基本要素传播模型的数学表达传染病模型博弈模型物理系统模型 提出新的物理学模型三类模型的比较提…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

字体包引入以及使用

将UI给的字体包下载到assets文件夹下 app.vue全局定义 <style> * {margin: 0;padding: 0; }font-face {font-family: PangMenZhengDao-3;src: url(/assets/fonts/庞门正道标题体3.0.TTF) format(truetype);font-weight: bold;font-style: normal; } </style>页面使…

python如何发送企业微信群消息

一、创建机器人&#xff0c;并获取webhook 1.1 进入企业微信中&#xff0c;添加群机器人&#xff0c;添加完成后可以获取到一个webhook的地址 1.2 群机器人企业微信接口的调用可以参考这个文件 https://developer.work.weixin.qq.com/document/path/99110#%E5%A6%82%E4%BD%…

【图神经网络 · 科研思考4】动态图数据集相关 wikipedia.csv;跨域节点表示学习;跨域自监督;动态时空图跨域;无监督领域适应方法?

这是2023年11月份的部分科研思考(四),主体内容围绕【图神经网络】展开,科研疑问解答 & 科研基础概念了解 & 科研方向,仅学习使用。 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 �…

Vue3知识点总结

目录 一.创建Vue2工程 1.使用 vue-cli 创建 2.使用 vite 创建 二.常用 Composition API setup ref函数 reactive函数 计算属性与监视 1.computed函数 2.watch函数 3.watchEffect函数 一.创建Vue2工程 1.使用 vue-cli 创建 查看vue/cli版本&#xff0c;确保vue/cli版本…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置&#xff1a;打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后&#xff0c;相应的release文件夹下的exe文件&#xff0c;无法打开 如有错误欢迎指出 检查系…

合并 K 个排序链表——Java解答

题目&#xff1a;合并 K 个排序链表 题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例&#xff1a; 假设有以下三个链表&#xff1a; 1->4->5, 1->3->4,…