实践16
异常之所以复杂,因为其类似于goto语句
如果同时存在catch块和finally块,则先进入catch再执行finally,如果没有catch块,则直接执行finally
实践17
产生异常的选择:1 捕捉并处理 2 捕捉并再次抛出 3 捕捉并抛出新异常 4 不捕捉
不要忽略异常 尽可能的就地处理 不要捕捉了异常但是不做任何事 至少打印留下log以便记录
实践18
当在处理异常期间 在catch或finally块中又抛出异常 则先前的异常会被屏蔽隐藏 这样就丢失了最初的错误信息
可以将期间所有的异常放入一个容器中
实践19
throw子句的缺点 在前期就设计好异常处理策略
处理异常有2种(1 自身处理 2 让调用者处理) 这会导致后期给一个小方法添加异常处理 如果该方法不具备能力自身解决 则需要让调用者处理 如果调用者依旧无法处理 则会继续向上 直至main 如果该小方法又多次被调用 会使程序的修改维护变得困难复杂
实践20
将函数可能抛出的异常统统列出是一个良好的变成习惯,不要因为这些异常都派生自另一个异常就不单独列出
如果复写了某个抛出异常的函数 那么:
1 不抛出异常 2 抛出相同的异常 3 抛出原异常的派生异常
实践21
在finally中对非内存类的资源进行释放(比如I/O流等) finally块无论如何都会被执行 不执行finally是不可能推出try区段的
实践22
不要在try语段中发出对return,break或是continue语句的调用
万一无法避免,一定要确保finally的出现不会改变函数的返回值
try{
return 2;
}finally{
return 4;
}
以上代码会返回4
实践23
将try-catch置于循环之外 对于没有JIT能力的JVM 会有性能上的提升
不启用JIT的情况下执行Test.class:
Java - Djava.compiler=NONE Test
实践24
不要将异常用于流程控制 异常只用于异常情况
实践25
不要每逢出错就使用异常,“可以预期的行为”应当使用传统的方式处理(返回代码,判断等) 只有不可预知的才用异常(文件损坏等)
实践26
如果构造函数可能失败 考虑在构造函数中抛出异常(构造函数没有返回值) 这样的方式更强固和高效(相对于制造一个成功构建的标志位,或检测某状态值判断成功与否等)
实践27
确保异常发生后,代码仍能按预想正确运行,在抛出异常前将所有的对象恢复为有效的状态
这类似于事务,必须有提交+回滚的机制
分享到:
相关推荐
Java实训课程通常旨在帮助学生和开发者提升其Java编程技能,通过实际操作来加深对语言特性和最佳实践的理解。"java实训.zip"这个压缩包很可能包含了完整的Java实践项目、代码示例、练习题以及可能的教学资源,如教程...
globalmousekeyhook InputSimulator
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
基于麻雀搜索算法优化SVR回归预测模型:以身体脂肪含量数据集的精准预测为研究对象,基于麻雀搜索算法优化SVR回归预测模型 输入不限,单输出 数据选用:身体脂肪含量数据集 针对SVR回归预测模型采用麻雀搜索算法 ,基于麻雀搜索算法; SVR回归预测模型优化; 身体脂肪含量数据集; 算法优化SVR模型,基于麻雀搜索算法优化SVR预测身体脂肪含量模型
1、文件内容:perl-Net-DNS-Nameserver-0.72-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Net-DNS-Nameserver-0.72-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-Class-Singleton-1.4-14.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Class-Singleton-1.4-14.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
C++-example-数组奇偶数分离.rar
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
JAVA**
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
自然语言处理导论+网络预览版(张奇)
一个使用 C++ 结合 DeepSeek 相关功能的源码,模拟一个简单的问答场景,使用 DeepSeek 模型来回答用户提出的问题。 实现思路 模型和分词器加载:利用 libtorch 加载 DeepSeek 模型,使用 tokenizers-cpp 加载对应的分词器。 问题处理:对用户输入的问题进行分词和编码,转化为模型可处理的张量形式。 模型推理:将编码后的问题输入到模型中进行推理,获取预测结果。 结果解码:把模型输出的结果解码为可读的文本。 环境准备 安装 PyTorch C++ 库(libtorch):从 PyTorch 官方网站 下载适合你系统的预编译版本。 安装 tokenizers-cpp:可以从其 GitHub 仓库 获取并编译安装。
,三菱FX3U ST语言程序模板 1 程序采用三菱FX3U的PLC编写。 2 触摸屏是台达 3 程序由以下部分组成 3.1 开机准备 3.2 复位 3.3 加热控制 3.4 暂停控制 3.5自动运行 3.6 生产管理 3.7节控制 3.8自动紧急停止 3.9 手动程序 3.10 手动复位 3.11 程序输出 3.12 气缸报警 3.13 密码管理 3.14 辅助控制 如果你是初学者,不建议去看。 如果你有一定的经验,可以更一步的提高技术。 为以后做运控控制卡,运动控制器做好基础。 是一个很不错的程序。
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
JavaEE
1、文件内容:perl-Module-Implementation-0.06-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Module-Implementation-0.06-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-Image-Xbm-1.08-21.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Image-Xbm-1.08-21.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-HTTP-Date-6.02-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-HTTP-Date-6.02-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于FPGA技术的HDMI视频输出实现策略与应用案例分析,基于fpga实现hdmi视频输出的实现 ,基于FPGA; 实现HDMI; 视频输出; 关键技术; 视频处理; 信号转换; 驱动开发,基于FPGA的HDMI视频输出实现技术