当前位置: 首页 > 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…...

神马网站 SEO 优化对网站转化率的影响

神马网站 SEO 优化对网站转化率的影响 在当今互联网时代&#xff0c;网站的流量和转化率直接关系到企业的销售和品牌的知名度。仅仅拥有流量并不意味着一切都顺风顺水&#xff0c;如何把这些流量转化为实际的业务和销售&#xff0c;这就涉及到神马网站的SEO优化对网站转化率的…...

mbedBug:面向mbed OS的轻量级嵌入式调试纳米框架

1. mbedBug&#xff1a;面向mbed OS的轻量级嵌入式调试纳米框架1.1 设计定位与工程价值mbedBug并非通用型调试器或完整测试框架&#xff0c;而是一个专为资源受限嵌入式环境裁剪的调试纳米框架&#xff08;Debug Nanoframework&#xff09;。其核心设计哲学是“最小侵入、最大可…...

Frappe-Gantt 甘特图进阶实战:从核心功能到企业级定制

1. Frappe-Gantt 甘特图在企业级项目中的核心价值 第一次接触Frappe-Gantt是在去年一个跨部门协作的电商大促项目中。当时我们需要一个能直观展示各环节时间节点的工具&#xff0c;试过几个商业软件后&#xff0c;最终选择了这个开源的轻量级解决方案。它最吸引我的地方在于——…...

流图与地平线图

1. 流图&#xff1a;数据的河流如果把传统的堆叠面积图想象成一块块整齐堆叠的积木&#xff0c;那么流图就像一条蜿蜒流淌的河流&#xff0c;河道的宽窄变化自然流畅&#xff0c;波峰波谷过渡平滑。它特别适合展示多个类别数据随时间的变化趋势&#xff0c;尤其是当你想强调整体…...

OpenClaw与Qwen3-14B深度优化:降低30%Token消耗的5个技巧

OpenClaw与Qwen3-14B深度优化&#xff1a;降低30%Token消耗的5个技巧 1. 为什么需要关注Token消耗&#xff1f; 当我第一次在本地部署OpenClaw对接Qwen3-14B模型时&#xff0c;就被它惊人的Token消耗量震惊了。一个简单的"打开浏览器搜索天气"任务&#xff0c;竟然…...

DOCX转LaTeX:从繁琐排版到学术自动化的无缝过渡

DOCX转LaTeX&#xff1a;从繁琐排版到学术自动化的无缝过渡 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 痛点场景&#xff1a;学术写作中的格式转换困境 深夜三点&#xff0c;研究生小李盯…...

哈佛医学院做了5679次组学分析:大模型能力没差别,关键在验证

哈佛医学院Zitnik团队的MEDEA 给出了一条明确的技术路线&#xff1a;与其追求更强的骨干大模型&#xff0c;不如在分析流程的每一步嵌入验证机制。在理解 MEDEA 的设计逻辑之前&#xff0c;先看一组来自消融实验的数据。在细胞类型特异性靶点发现任务中&#xff0c;研究团队将M…...

大厂真实高频的 LLM 大模型面试 36 题例题详解

一、基础原理篇(8 题) 1. 什么是 Transformer?核心结构是什么? 答:Transformer 是基于自注意力机制的 seq2seq 模型,完全替代 RNN 结构。核心结构: Encoder(编码)+ Decoder(解码) 多头注意力(Multi-Head Attention) 前馈网络 FFN 层归一化、残差连接举例:GPT 只…...

Linux时钟子系统:CCF框架与驱动开发实践

1. Linux时钟子系统概述在嵌入式Linux系统中&#xff0c;时钟管理是驱动开发的基础环节之一。时钟子系统负责为整个系统提供精确的时序控制&#xff0c;从CPU主频到外设工作时钟&#xff0c;都需要通过时钟子系统进行管理和配置。Linux内核通过CCF&#xff08;Common Clock Fra…...

从Flash到I2C:盘点那些让你头疼的时序图符号,并教你用Python+逻辑分析仪自动解析

从Flash到I2C&#xff1a;时序图符号解析与Python自动化实战 第一次翻开某款Flash芯片的数据手册时&#xff0c;我被密密麻麻的时序图符号彻底击垮了。灰色交叉、斜坡箭头、省略号标记...这些看似简单的图形背后&#xff0c;隐藏着芯片厂商精心设计的通信规则。作为嵌入式开发者…...