当前位置: 首页 > news >正文

Java的异常机制

异常机制

三种类型

  • 检查型异常:程序员无法预见的
  • 运行时异常:在编译时会被忽略
  • 错误ERROR:错误在代码中被忽略,在编译时检查不到

异常处理机制

  • 抛出异常
  • 捕获异常
  • 异常处理的五个关键字:try,catch,finally,throw,throws

以下为这五个关键词的使用方法:

package exception;public class Demo02 {public static void main(String[] args) {//假设要捕获多个异常:从小到大去写try {new Demo02().a();}catch (Error e){//catch(想要捕获的异常类型) 捕获异常System.out.println("ERROR");}catch (Exception e){System.out.println("EXCEPTION");}catch (Throwable e){System.out.println("THROWABLE");}finally {System.out.println("finally");}}public void a() {b();}public void b() {a();}
}
package exception;import org.w3c.dom.ls.LSOutput;public class Demo03 {public static void main(String[] args) {int a=1;int b=0;try {System.out.println(a/b);} catch (Exception e) {throw new RuntimeException(e);} finally {}}}
package exception;public class Demo01 {public static void main(String[] args) {new Demo01().test(1,0);}//假设这方法中,处理不了这个异常,方法上抛出异常用throwspublic void  test(int a,int b) throws ArithmeticException {if(b==0){throw new ArithmeticException();}System.out.println(a/b);}}
/*int a=1;int b=0;try{//try监控区域if(b==0){//throw  throws用于方法throw new ArithmeticException();//主动抛出异常}System.out.println(a/b);}catch (ArithmeticException e){System.out.println("程序出现异常,变量b不能为0");} finally {//善后工作System.out.println("finally");}//finally 可以不要finally*/

自定义异常

步骤:

  • 创建自定义异常类
  • 在方法中通过throw关键字来抛出异常对象
  • 如果当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
  • 在出现异常方法的调用者中捕获并处理异常
package exception;
//自定义异常
public class MyException extends Exception{//传递数字>10private int detail;public MyException(int a){this.detail=a;}//toString:异常的打印信息@Overridepublic String toString() {return "Demo04{" +"detail=" + detail +'}';}
}

我们来测试下

package exception;public class Test {static void test(int a) throws MyException {System.out.println("传递的参数为:"+a);if(a>10){throw new MyException(a);//抛出}System.out.println("OK");}public static void main(String[] args) {try {test(1);} catch (MyException e) {System.out.println("MyException=>"+e);}}}

总结:

  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加try-catch,处理潜在异常
  • 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源

相关文章:

Java的异常机制

异常机制 三种类型 检查型异常:程序员无法预见的运行时异常:在编译时会被忽略错误ERROR:错误在代码中被忽略,在编译时检查不到 异常处理机制 抛出异常捕获异常异常处理的五个关键字:try,catch&#xff…...

考虑预同步的虚拟同步机T型三电平逆变器并离网MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 三相 T 型三电平逆变器电路如图所示,逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV,直流侧中点电位 O 设为零电位,交流侧输出侧是三相三线制连…...

记一次k8s取证检材过期的恢复

复盘盘古石k8s的时候碰到了证书过期的问题,在此记录解决方法 报错信息:192.168.91.171:6443 was refused - did you specify the right host or port? 查看证书是否过期 kubeadm alpha certs check-expiration或 openssl x509 -in /etc/kubernetes/…...

【网站项目】自助购药小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

Ubuntu22.04修改默认窗口系统为X11

Ubuntu22.04安装默认窗口系统为Wayland(通过设置->关于可以看到)。 一、用Ubuntu on Xorg会话登录 用户登录时,点“未列出”,输入用户名后,在登录界面底部的齿轮图标中,选择 "Ubuntu on Xorg&quo…...

延时队列实现实战:如何利用 RabbitMQ 实现延时队列,以满足特定延迟处理需求

实现延时队列,可以通过RabbitMQ的死信队列(Dead-letter queue)特性,“死信队列”是当消息过期,或者队列达到最大长度时,未消费的消息会被加入到死信队列。然后,我们可以对死信队列中的消息进行消…...

关于在Ubuntu上配置mysql踩的一些坑

最近准备换工作了,回顾了下学校时期做的那个webserver,又在linux下mysql踩了一些坑,特此记录下来 程序编译错误mysql.h: No such file or directory 云服务器缺少mysql必要的运行组件,安装: sudo apt-get install l…...

JSBridge原理 - 前端H5与客户端Native交互

1. 概述: 在混合应用开发中,一种常见且成熟的技术方案是将原生应用与 WebView 结合,使得复杂的业务逻辑可以通过网页技术实现。实现这种类型的混合应用时,就需要解决H5与Native之间的双向通信。JSBridge 是一种在混合应用中实现 …...

【Java EE】Spring请求如何传递参数详解

文章目录 🎍传递单个参数🌴传递多个参数🍀传递对象🎄后端参数重命名(后端参数映射)🌲传递数组🎍传递集合🌴传递JSON数据🌸JSON概念🌸JSON的语法&a…...

菜鸟笔记-Numpy常用函数用法汇总

NumPy(Numerical Python的简称)是Python中用于处理数组和矩阵的库,提供了大量的数学函数来操作这些数组。通过前面的学习,慢慢也能发现一些规律,以下是NumPy的一些常用函数及其用法汇总: 数组创建 numpy.a…...

tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图

文章目录 前言一、实现步骤1. 获取所需特征点的索引2. 使用opencv.js 计算俯仰角、水平角和翻滚角cv.solvePnP介绍cv.solvePnP原理运行代码查看效果 3.绘制姿态示意直线添加canvas元素计算姿态直线坐标并绘制 总结 前言 在计算机视觉领域,估算脸部姿态是一项具有挑…...

Linux命令-dpkg-divert命令(Debian Linux中创建并管理一个转向列表)

说明 dpkg-divert命令 是Debian Linux中创建并管理一个转向(diversion)列表,其使得安装文件的默认位置失效的工具。 语法 dpkg-divert(选项)(参数)选项 --add:添加一个转移文件; --remove:删除一个转移…...

flex: 1 是哪些属性的缩写?

flex&#xff1a;1是哪些属性的缩写? flex&#xff1a;1 是 flex-grow: 1, flex-shrink: 1,flex-basis: 0% 的缩写&#xff1b; 解释下flex-grow flex-grow是将剩余的空间&#xff0c;根据flex-grow的值平分&#xff0c;然后加到flex-basis上 <!doctype html> <htm…...

python基于opencv实现数籽粒

千粒重是一个重要的农艺性状&#xff0c;通过对其的测量和研究&#xff0c;我们可以更好地理解作物的生长状况&#xff0c;优化农业生产&#xff0c;提高作物产量和品质。但数籽粒数目是一个很繁琐和痛苦的过程&#xff0c;我们现在用一个简单的python程序来数水稻籽粒。代码的…...

OpenCV图像处理——基于OpenCV的ORB算法实现目标追踪

概述 ORB&#xff08;Oriented FAST and Rotated BRIEF&#xff09;算法是高效的关键点检测和描述方法。它结合了FAST&#xff08;Features from Accelerated Segment Test&#xff09;算法的快速关键点检测能力和BRIEF&#xff08;Binary Robust Independent Elementary Feat…...

13.JavaWeb XML:构建结构化数据的重要工具

目录 导语&#xff1a; 一、XML概念 &#xff08;1&#xff09;可拓展 &#xff08;2&#xff09;功能-存储数据 &#xff08;3&#xff09;xml与html的区别 二、XML内容 三、XML用途 四、案例&#xff1a;使用XML构建在线书店的书籍数据库 结语&#xff1a; 导语&…...

鸿蒙OS实战开发:【多设备自适应服务卡片】

介绍 服务卡片的布局和使用&#xff0c;其中卡片内容显示使用了一次开发&#xff0c;多端部署的能力实现多设备自适应。 用到了卡片扩展模块接口&#xff0c;[ohos.app.form.FormExtensionAbility] 。 卡片信息和状态等相关类型和枚举接口&#xff0c;[ohos.app.form.formInf…...

深度学习基础之一:机器学习

文章目录 深度学习基本概念(Basic concepts of deep learning)机器学习典型任务机器学习分类 模型训练的基本概念基本名词机器学习任务流程模型训练详细流程正、反向传播学习率Batch size激活函数激活函数 sigmoid 损失函数MSE & M交叉熵损失 优化器优化器 — 梯度下降优化…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果 一、简单介绍 二、简单指定视频某片段重复播放…...

ARXML处理 - C#的解析代码(二)

参数类 参数容器&#xff08;ECUCPARAMCONFCONTAINERDEF&#xff09;的PARAMETERS集合类由以下参数类实例构成。 枚举参数&#xff08;ECUCENUMERATIONPARAMDEF &#xff09; 配置一个下拉选项&#xff0c;如PORT中一个pin可以配置SPI, CAN, PWM /// <remarks/>[Syste…...

避坑指南:Tina Linux下MIPI DSI与LVDS屏调试的那些‘坑’(以V853/D1s为例)

Tina Linux下MIPI DSI与LVDS屏调试实战避坑指南&#xff08;V853/D1s开发板为例&#xff09; 1. 高速差分接口调试的"死亡陷阱" 当V853开发板首次连接那块7英寸MIPI屏时&#xff0c;我遭遇了职业生涯最诡异的显示故障——屏幕上半部正常显示&#xff0c;下半部却呈现…...

LangChain实战:从零构建RAG应用与模块化开发指南

1. 项目概述&#xff1a;LangChain示例库的实战价值如果你最近在尝试用大语言模型&#xff08;LLM&#xff09;构建应用&#xff0c;大概率会听到“LangChain”这个名字。它就像一个乐高积木的百宝箱&#xff0c;把调用LLM、连接外部数据、管理对话记忆这些复杂任务&#xff0c…...

为什么92%的戏剧研究生还没用上NotebookLM真正能力?——解锁其多源文本互文性推理的3个密钥

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM戏剧研究辅助的范式革命 传统戏剧研究长期依赖人工文本比对、手写批注与线性阅读&#xff0c;面对莎士比亚全集、元杂剧数百种版本、当代实验戏剧脚本等海量非结构化文本&#xff0c;知识提取…...

网安工具系列python系列【仅供参考】:Python实战:利用fofa API高效搜索网络资产

Python实战:利用fofa API高效搜索网络资产 Python实战:利用fofa API高效搜索网络资产 1. 从零开始:为什么你需要一个自动化的资产搜索工具? 2. 动手前的准备:你的fofa账户和Python环境 2.1 获取你的fofa API凭证 2.2 搭建Python脚本环境 3. 核心代码拆解:一行行理解搜索脚…...

中小团队如何通过Taotoken统一管理多个AI项目的API成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 中小团队如何通过Taotoken统一管理多个AI项目的API成本 应用场景类&#xff0c;面向同时进行多个AI应用探索或开发的中小团队技术管…...

告别手动计算!手把手教你用MCAL配置英飞凌Aurix2G的GTM模块时钟(CMU篇)

英飞凌Aurix2G GTM模块时钟配置实战&#xff1a;从原理到避坑指南 当第一次接触英飞凌Aurix2G系列芯片的GTM模块时&#xff0c;许多工程师都会对那个看似简单却暗藏玄机的时钟配置环节感到头疼。作为整个定时器系统的"心跳发生器"&#xff0c;CMU&#xff08;时钟管理…...

MASA全家桶汉化包完整教程:让Minecraft模组界面彻底中文化

MASA全家桶汉化包完整教程&#xff1a;让Minecraft模组界面彻底中文化 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为MASA模组复杂的英文界面而烦恼吗&#xff1f;作为中文Minec…...

Nacos高可用集群部署实战:从架构设计到生产运维全解析

1. 项目概述&#xff1a;为什么Nacos集群部署是微服务架构的“定海神针”在微服务架构的实践中&#xff0c;服务注册与发现、配置管理是两大基石。Nacos作为Spring Cloud Alibaba生态的核心组件&#xff0c;集这两大功能于一身&#xff0c;其稳定性和可用性直接决定了整个微服务…...

卡片刷新三板斧:定时、定点、主动请求——搞清楚才不会乱

文章目录先搞明白谁在控制刷新方式一&#xff1a;定时刷新&#xff08;updateDuration&#xff09;方式二&#xff1a;定点刷新&#xff08;scheduledUpdateTime&#xff09;方式三&#xff1a;主动请求刷新&#xff08;formHost.requestForm&#xff09;三种方式对比卡片 UI 接…...

别再乱放模型文件了!手把手教你用Simulink Project管理MBD项目(附目录结构最佳实践)

从混乱到秩序&#xff1a;Simulink Project工程化管理实战指南 在模型驱动开发&#xff08;MBD&#xff09;的世界里&#xff0c;一个整洁有序的项目结构就像建筑师的蓝图——它不仅是工作的基础&#xff0c;更是团队协作和长期维护的保障。许多工程师在初次接触Simulink时&…...