异常处理的原因,try/catch的应用场景

数据基础设施建设任务中的技术名词解析 近日,国家数据局确定了18个数据基础设施建设任务(先行先试)承担地区,建设任务内容为:数场、数据空间、数据原件、隐私计算、数联网、区块链。这些概念都有什么样的内涵,他们的相互关系是怎样的? 阅读详情

大家好,我是一枚正直纯洁善良的如刚入门的Java程序员,今天跟大家分享一下异常处理的原因,try/catch的应用场景。


1. 知识背景
异常exception
导致程序的正常流程被中断的事件,叫做异常

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

异常发生的原因有很多,通常包含以下几大类:

1.用户输入了非法数据。

2.要打开的文件不存在。

3.网络通信时连接中断,或者JVM内存溢出。

Try/catch语法

使用 try 和 catch 关键字可以捕获异常。

try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码。

一个 try 代码块可以后面跟随多个 catch 代码块,叫多重捕获。

如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。


2. 知识剖析

java如何处理异常?

java提供了抛出异常捕获异常的逻辑用于处理异常,当程序抛出异常时,如果不存在捕获异常逻辑,正在执行的方法将停止执行,并将该异常向外抛出,调用该方法的程序进行同样的处理,如果也没有进行捕获,则将一层一层的向外抛出,直到到达当前线程处时将会终止线程的执行。
 

异常的分类:
检查性异常: 最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常:   运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误:   错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
所有的异常类是从java.lang.Exception类继承的子类。
Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。

3. 常见问题
在什么场景下加Try-Catch机制

Try-Catch机制注意点


4. 解决方案
1)以业务逻辑功能为单位,在最上层加Try-Catch机制。为什么要这样做呢?这主要是增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。

2)底层代码,在可能出错的地方加Try-Catch机制,用Catch侦测具体的异常,然后就具体的异常,采取相应的解决方案。

3)底层代码,在需异常追踪时加Try-Catch机制,在Catch块中抛出自定义异常,调试时可迅速定位到错误代码段。

Try-Catch机制会将异常屏蔽掉,必须根据具体的应用场景,具体分析。


5. 编码实战
先构造一个方法用来表示catch执行

image.png

image.png
 
image.png

6. 扩展思考
catch 体里遇到 return 是怎么处理?
finally 体遇到 return 怎么办?
finally 体里有 System.exit() 方法怎么处理?
当 catch 和 finally 体里同时遇上 return 怎么办?

(假设方法需要返回值)java 的异常处理中,

在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块,

如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法;

如果有 finally 代码块,此时程序执行到 try 代码块里的 return 语句之时并不会立即执行 return,而是先去执行 finally 代码块里的代码,

若 finally 代码块里没有 return 或没有能够终止程序的代码,程序将在执行完 finally 代码块代码之后再返回 try 代码块执行 return 语句来结束整个方法;

若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。


7. 参考文献
http://www.cnblogs.com/tianzhiliang/archive/2010/10/09/1846676.html
http://www.blogjava.net/fancydeepin/archive/2012/07/08/java_try-catch-finally.html

https://www.cnblogs.com/zouheng/p/6706114.html

基于鸿蒙 UniProton 的汽车电子系统开发指南 基于鸿蒙UniProton实时操作系统,提供了汽车电子系统开发的完整指南。通过统一的设计模式和开发规范,实现了高效、可靠的汽车电子系统开发。 阅读详情

相关推荐

Anaconda+Pycharm安装

我提前创建好一个自己项目所需的虚拟环境。步骤是:打开终端(cmd)或者 搜索 ”Anaconda Prompt“ 并打开,输入 conda create -n pytorch python=3.9 -c。

Wang_sweet的博客 3230

try和catch的用法

语句中,程序执行一段代码,如果发生了异常,则会被捕获,并转到相应的。语句用于处理程序运行时可能发生的异常,以保证程序的稳定性和正确性。方法发生了异常,则会被捕获并输出一条错误消息。是用于处理异常的语句,它们构成了一种异常处理机制。例如,在下面的代码中,程序执行了一个方法。在上面的代码中,如果。

mingyuexingzuo的博客 5万+

Silvaco TCAD仿真4——DeckBuild实战:从示例库到自定义设计

本文详细介绍了Silvaco TCAD仿真工具DeckBuild的实战应用,从示例库的使用到自定义设计的全过程。通过具体案例和参数修改技巧,帮助用户快速掌握TCAD仿真技术,提升半导体器件设计的效率和精度。特别适合需要从基础入门到进阶操作的工程师和研究人员。

weixin_29284657的博客 433

什么时候需要使用try-catch

代码执行预料不到的情况,或出错的可能性很大时,使用try-catch语句。 1、构造一个文件输入流,(上传文件时,线上环境的内存情况不确定)出错的可能性很大。 2、文件上传写入,数据库事务的提交,还有摄像头和打印机的使用 使用数据库事务的时候使用try-catch,如果事务执行成功就提交事务,如果事务执行失败就由catch提示错误并回滚事务。还有就是在使用curl方式访问其他网络地...

Lwy2009058212的博客 3357

Thompson Sampling vs UCB:5个真实业务场景下的算法选型指南

本文深入对比了Thompson Sampling与UCB算法在电商推荐、在线广告、医疗试验、金融定价和游戏调整五大真实业务场景下的表现。通过量化指标分析,为技术决策者提供了清晰的选型指南:Thompson Sampling凭借其概率匹配和贝叶斯框架,在需要快速收敛、处理冷启动及复杂约束的场景中通常更具优势;而UCB则在要求确定性、可解释性和理论保证的场景下表现更佳。

weixin_29181861的博客 153

保姆级教程:在RK3588开发板上驱动多路MIPI摄像头(从VICAP配置到ISP调优)

本文详细介绍了在RK3588开发板上驱动多路MIPI摄像头的完整流程,从VICAP配置到ISP调优的全方位解析。通过硬件架构分析、开发环境搭建、设备树配置、V4L2数据采集以及ISP图像调优等步骤,帮助开发者高效实现多路摄像头驱动,适用于工业检测和智能安防等领域。

weixin_42552315的博客 389

什么时候使用Try Catch(转)

几条建议:   如果无法处理某个异常,那就不要捕获它。   如果捕获了一个异常,请不要胡乱处理它。   尽量在靠近异常被抛出的地方捕获异常。   在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。   按照您的异常处理必须多精细来构造您的方法。   需要用几种类型的异常就用几种,尤其是对于应用程序异常。   把低层次的异常封装成层次较高程序员较容易理解的异常。   尽量输出造成异...

weixin_30877181的博客 940

TMC步进电机驱动stealthChop

经过九九八十一难,芯片手册拜读了好多遍,找了好多资料,问了好多人使用TMC2660驱动步进电机终于成功了。最后的问题居然是硬件把管脚画错了,然后我又没有检查,哭。。。

那可真是太开心了的博客 4489

try/catch 的解释与用法

目录 目录 定义 语法 注意: 多重捕获块 举例 1. NullPointerException 空指针异常 2. ArrayIndexOutOfBoundsException 数组下标越界异常 3. ArithmeticException 数学运算异常 4. IllegalArgumentException 参数错误 5. IllegalAccessException 没有访问权限...

NullNameException的博客 3万+

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 438

Linux系统安装AutoDockTools、AutoGrid和AutoDock并实现分子对接(详细讲解)

linux系统为centos7.0 按照下面操作安装AutoDockTools(MGLTools) 1. 下载安装包,链接(https://ccsb.scripps.edu/mgltools/downloads/),我的linux系统是64位,下载红色标记源代码,拷贝入linux目标文件夹下。 2. shell终端进行安装: 1. 终端进入安装包所在文件夹,并获取root权限;赋予代码安装权限; cd /home/... #目标文件夹,根据目标程序文件位置进行更改 su #获

carlos_zhao的博客 1万+

【c#】异常处理:try catch throw

异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。 也就是说,在程序运行时出现的任何意外或异常情况时,处理这种意外或情况的方法,叫做异常处理。 C#编程语言本身就提供了这种异常处理机制。 异常处理的四个关键字:Try Catch Throw Finally Try:一个try块标识了一个将被激活的特定的异常的代码块

幸遇三杯酒好,况逢一朵花新 6416

Dify智能体开发:发布嵌入网站

Dify 支持将你的 AI 应用嵌入到业务网站中,你可以使用该能力在几分钟内制作具有业务数据的官网 AI 客服、业务知识问答等应用。点击 WebApp 卡片上的嵌入按钮,复制嵌入代码,粘贴到你网站的目标位置。

王国平的博客 3243

C++ try catch 异常处理

在执行C ++代码时,可能会发生不同的错误:程序员编写的编码错误,由于错误的输入引起的错误或其他不可预见的情况。C++ 中try块可以捕获测试代码块中的错误。catch块可以处理错误。本文主要介绍C++ try catch异常处理(Exception)。...

weixin_52026996的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# try-catch异常处理的用法

除了使用已有的异常类型,还可以自定义异常类型,以便更好地适应特定的业务需求。自定义异常类要求继承自类或其子类,并且应有一个公共的构造函数。// 构造函数逻辑// 抛出自定义异常throw new CustomException("自定义异常信息");异常处理是 C# 中重要的技术之一。通过throw抛出异常、try-catch捕获和处理异常,我们能够改善程序的稳定性和可靠性。合理的异常处理将提高代码的容错性和用户体验。

故事不长丨的博客 9544

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java 中的异常处理之 try-catch 详解

异常处理是 Java 编程中非常重要的一部分。通过使用 try-catch 语句,我们可以更好地处理程序运行过程中出现的异常情况,提高程序的稳定性和可靠性。在使用 try-catch 语句时,需要注意合理地处理异常,避免隐藏潜在的问题。同时,也可以结合finally块和语句来更好地管理资源和确保代码的正确性。

mailangduoduo的博客 6171

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

在Android Native层实现Try/Catch异常处理机制

本文介绍了在Android Native层实现类似于Java的try/catch异常处理机制的方法,包括使用信号处理和非局部跳转捕获C语言中的异常,获取异常的详细信息,并处理C++抛出的异常。这些方法有助于提高Native代码的稳定性和可维护性。

陆业聪 1772

【try……catch】C++ try…… catch 笔记(C语言中也可以Try-Catch异常处理)

目录 C++ try……catch catch(CException *e) 打印异常信息 不经意间的内存泄露:try-catch(CException *e) [异常对象需要手动释放] C++ try catch 捕获空指针异常,数组越界异常 C++ try catch 异常类 异常类大全 C try……catch 没用用到MFC,是不支持CException的。 C...

我的笔记本 5026

Java在异常处理中try、catch、finally的执行顺序

通过学习Java的异常处理,知道它是通过try-catch-finally来实现的,那么就有一个疑问?他们的执行顺序是如何的,接下来我将tong'g

qq_48241564的博客 6103

try/catch语句

try/catch语句 try/catch作为JavaScript处理异常的一种的方式,使用方法跟很多语言都是一样的。 try{ // 未知的代码 } catch(error){ // 代码异常时所要做的事 } 任何可能出错的代码放在try代码块里面,处理异常的代码就放在catch代码块里面。只要try代码块里面的代码出现了错误,就会直接执行退出,跳到catch里。catch接受一个参数对象,代码异常跳到catch时,该对象接收一个发生错误的的信息。 catch和其他的语言有点不一样,就算

xiaoChenPengYou的博客 9311

java 必须try catch的异常_Java异常处理只有Try-Catch吗?

今天,我们将讨论一个非常重要的主题-Java 中的异常处理。尽管有时可能会对此主题进行过多的讨论,但并非每篇文章都包含有用且相关的信息。Java 中最常见的异常处理机制通常与 try-catch 块关联 。我们使用它来捕获异常,然后提供在发生异常的情况下可以执行的逻辑。的确,你不需要将所有异常都放在这些块中。另一方面,如果你正在研究应用程序的软件设计,则可能不需要内置的异常处理机制。在这种情况下...

weixin_35816790的博客 3842

C++异常处理 throw try catch

C++ 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复,并防止程序出现崩溃。C++ 使用trythrow, 和catch关键字来实现异常处理。C++ 标准库定义了一些通用的异常类,它们位于头文件中。这些异常类帮助程序员识别和处理不同类型的错误。C++ 标准库异常类通常都继承自,这是所有标准异常类的基类。

TsuanS13的博客 2254

Java 异常处理 try catch

对于运行时异常,我们不要用try...catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异常,一旦发现该异常,正确的做法就会改进程序设计的代码和实现方式,修改程序中的错误,从而避免这种异常。如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。异常是程序中的一些错误,有些异常需要做处理,有些则不需要捕获处理,异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。

qq_43159578的博客 4709

C#中的异常处理try catch finally

C#中的异常处理是一种检测和处理代码中运行时错误的机制,由try catch和finaly块提供支持。.NET框架提供了常见异常的内置类。程序执行期间发生的异常,它们可能是由于逻辑或系统错误引起的。如果程序员未提供处理这些异常的机制,则.NET运行时环境将提供默认机制,该机制将终止程序执行。 try..catch..finally C#提供了三个关键字try,catch和finally,以实现异常处理。尝试将可能引发异常的语句括起来,而如果存在则catch会处理异常。finally可以用于完成任何.

ananlele_的专栏 4572

C#异常处理 — try、catch语句

  一、为异常寻找处理程序 首先先放一张处理异常的一般法则图片,这是异常发生后系统寻找异常处理程序规则的流程: 该图片摘抄自 Solis, D.M., Illustrated C# 2012(Fourth Edition). 2013: 人民邮电出版社.    以下代码是个人用来学习记录,功能是看懂try、catch语句可以看懂在搜索调用栈来寻找一个异常处理程序的顺序。 /* ...

img_Guo的博客 5738
上一篇: CLEAN,PACKAGE,INSTALL和DEPLOY的区别
下一篇: WEB.XML里的主要配置都包括什么 都代表什么含义
莫名+
博客等级 码龄9年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值