异常处理注意点

从《新程序员》系列看程序员职业发展趋势与成长路径 在信息技术日新月异的当下,软件开发行业蓬勃发展,程序员作为行业的核心力量,其成长与发展路径备受瞩目。《新程序员》系列杂志应运而生,以其前瞻性的视角、丰富多元的内容,为广大程序员尤其是新程序员提供了洞察行业趋势、学习前沿技术、汲取前辈经验的宝贵窗口。该系列杂志由优快云精心打造,自推出以来,便在开发者群体中引发了强烈反响。《新程序员》系列内容涵盖了从基础技术知识的深入解读,到行业前沿趋势的精准预测;从优秀开发者的成长历程分享,到各大企业数字化转型的实践案例剖析等多个维度。 阅读详情

异常处理流程

  1. 执行时出现异常,系统生成异常对象
  2. 系统寻找能出来该异常对象的 catch 块
  3. 若找到合适的 catch(catch 的对象是异常对象或它子类)
  4. 则把该异常交给该 catch 快处理,这个过程被称为捕获(catch)异常
  5. 程序继续正常运行。

如果 java 运行时环境找不到捕获异常的 catch 块,程序停止运行,也叫程序崩溃、挂了。

不管程序代码块是否处于 try 块中,甚至包括 catch 块中的代码,只要执行该代码块时出现了异常,系统都会自动生成一个相应的异常对象。若程序没有为该段代码定义任何的 catch 块,java 运行时环境就会因为无法找到处理该异常的 catch 块,程序就会在此退出。


{} 问题

try 块和 if 语句不一样,try 块后面的 {} 不可省略,即使 try 块里有且仅有一行代码,也不可以。同时 catch 块和 finally 也是不可以的。

根据前面说明,显而易见的:try 块中声明的变量是代码块内的局部变量,出了 try 块无效


先小后大

进行异常捕获时,一定要记住先捕获小异常,后不会大异常


捕获多异常

java 7 开始,一个 catch 块可以捕获多种类型的异常

捕获多种类型异常时注意:

  1. 多种异常类型间有竖线(|)隔开
  2. 异常变量有隐式的 final 修饰,因此不可重新赋值。

try、catch、finally

finally 块常用语回收资源:数据库连接、网络连接、IO 资源

除非在 try 块、catch 块中调用了退出虚拟机的方法(System.exit(1)),否则不管在 try 块、catch 块中执行任何的代码,出现任何情况,即使 return 都不管用,异常处理的 finally 块无论如何都会被执行

注意:

通常情况下,不要再 finally 块中使用 return 或 throw 等导致方法终止的语句,一旦在 finally 块中使用了 return 或 throw 语句,将会导致 try 块、catch 块中的 return、throw 语句失效。

尽量避免在 finally 块中使用 return 或 throw 等导致方法终止的语句,否则可能出现一些很【奇怪】的情况


自动关闭资源的 try 语句

java 7 开始增强了 try 语句的功能 —— 它允许在 try 关键字后面跟一对圆括号,圆括号内可初始化一个多或多个资源,此处的资源指的是那些必须在程序结束时显示关闭的资源(数据库连接、网络连接、磁盘文件),try 语句在该代码块语句结束时自动关闭这些资源。

注意点:

  • 在 try 后圆括号的初始化的对象必须实现 AutoCloseable 或 Closeable 接口。
  • Closeabele 是 AutoCloseable 的子接口
  • 只能在 try 后的圆括号内同时声明和实例化,即必须保证实例化的该对象的作用域必须是 try 块内的局部变量。

代码,以下方式等价:

// 方式一
try (//
        InputStream inputStream = new FileInputStream("D:/demo.txt"); //
        OutputStream outputStream = new FileOutputStream("D:/demo.txt.back");//
) {
    int available = inputStream.available();
    if (available > 0) {
        byte[] bytes = new byte[available];
        inputStream.read(bytes);
        outputStream.write(bytes);
    }
} catch (FileNotFoundException e) {
    // TODO: handle exception
    e.printStackTrace();
} catch (IOException e) {
    // TODO: handle exception
    e.printStackTrace();
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}

// 方式二
InputStream inputStream = null;
OutputStream outputStream = null;
try {
    inputStream = new FileInputStream("D:/demo.txt");
    outputStream = new FileOutputStream("D:/demo.txt.back");

    int available = inputStream.available();
    if (available > 0) {
        byte[] bytes = new byte[available];
        inputStream.read(bytes);
        outputStream.write(bytes);
    }
} catch (FileNotFoundException e) {
    // TODO: handle exception
    e.printStackTrace();
} catch (IOException e) {
    // TODO: handle exception
    e.printStackTrace();
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
} finally {
    if (inputStream != null) {
        try {
            inputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            inputStream = null;
        }
    }
    if (outputStream != null) {
        try {
            outputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            outputStream = null;
        }
    }
}
CPU、Core、RISC、ARM等的前世今生 CPU、Core、RISC-V 、ARM、ASIC、FPGA、SOC概念及区分 阅读详情

相关推荐

从零搭建uniapp+vue3+ts+tailwindcss多端兼容开发环境

本文详细介绍了如何从零搭建uniapp+vue3+ts+tailwindcss多端兼容开发环境,包括环境准备、TailwindCSS集成、小程序兼容性解决方案以及样式优化技巧。通过实战步骤和常见问题解答,帮助开发者快速掌握这套技术栈,提升开发效率。

weixin_28693309的博客 323

java catch 多个异常_Java捕获多个异常和重新抛出异常

在Java 7中,catch块已得到改进,可以在单个catch块中处理多个异常。如果捕获多个异常并且它们具有相似的代码,则使用此功能将减少代码重复。让我们通过一个例子来理解java catch多个异常特性。在Java 7之前,我们曾经逐一捕获多个异常,如下所示:catch (IOException ex) { logger.error(ex); throw new MyExce...

weixin_36125588的博客 6570

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3227

Java异常处理

异常处理异常概述异常分类(继承体系)ThrowableErrorExceptionChecked异常RuntimeException异常处理使用try{}catch(){}捕获异常throws声明抛出异常使用throw抛出异常自定义异常异常跟踪

尘风yf的博客 217

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南

本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。

weixin_28223453的博客 489

图解联合概率密度、边缘概率密度、条件概率密度之间的关系

简要图解联合概率密度、边缘概率密度、条件概率密度之间的关系

一个搬运知识的笨小孩 2万+

java多层catch语句_Java异常之catch语句块

今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常。原文是Java官方的文档,现翻译如下。红字为个人备注。public String selectByRule(String ruleId) {try {selectService.select(ruleId, null, false);ret...

weixin_39917046的博客 1101

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

MoorePlus的博客 4219

java异常处理之try...catch...finally详解

异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响。一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try…catch…finally的一个总结。一.java继承体系    Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系。如图: 从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有

sdr_zd的博客 3989

极智AI | 详解 ViT 算法实现

大家好,我是极智视界,本文详细介绍一下 ViT 算法的设计与实现,包括代码。

极智视界 5603

RT-DETR训练前的准备,将数据集划分成训练集、测试集验证集(附完整脚本及使用说明)

在计算机视觉领域,当我们着手训练一个模型时,。其中,将数据集划分为和更是一项基础性且关键的操作。这篇博客分析了这一划分背后的原因、其重要意义以及如何通过代码实现,帮助大家更好地理解和运用这一技巧,。

Limiiiing的博客 906

Java中的多异常捕获问题最后

在Java7以前,每个catch块只能捕获一种类型的异常;但是从Java7开始,一个catch块可以捕获多种类型的异常。使用一个catch块捕获多种类型的异常时需要注意一下两个地方。 1 多种异常类型之间用竖线(|)隔开。 2捕获多种类型的异常时,异常变量有隐式的final修饰,因此程序不能够对异常进行重新复制。 多异常捕获代码如下: public class MultiExcepti

毛豆豆的博客 2009

百度AI架构师亲授:Agentic智能体在教育领域的落地(附个性化学习案例)

当我们谈论“教育智能化”时,我们真正需要的不是“更聪明的工具”,而是“能懂人的伙伴”——一个能像优秀教师那样主动观察、精准判断、动态调整的“数字助手”。Agentic智能体(智能体)正是这样的存在:它具备“自主性”(主动决策)、“反应性”(感知环境)、“目标导向”(聚焦学习目标)和“社会性”(与人/其他智能体协作),完美匹配教育场景中“个性化、动态化、协同化”的核心需求。本文将从底层逻辑到工程实现为什么Agentic是教育AI的“下一站”?(痛点与价值)Agentic智能体的核心架构是什么?

AI天才研究院 356

Java异常处理注意点

异常的处理机制 1.两种异常处理方式:try-catch-finally ; throws ; 2.异常处理:抓抛模型 2.1.过程一:“抛”生成异常对象的过程   程序在执行过程中,一旦出现异常,就会在出现异常的代码的位置,生成相应的异常类的对象,并将,此对象抛出。 2.2.过程二:“抓”可以为异常处理的两种方式:try-catch-finally ; throws ;...

weixin_30466953的博客 90

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java异常处理的注意点总结

总结一下看到的Java异常处理的注意点的内容 1)  Checked Exception和UncheckedException的选择 这一点其实仁者见仁智者见智。 Checked Exceptions 应该定义为:可以被预料到,却无法避免,但是可以进行适当处理的异常。 Unchecked Exceptions 则是Checked Exceptions以外的异常 可

呵呵哈哈 1066

精雕软件(JDpaint) 5.5 绿色版

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

异常处理的注意点

异常处理的注意点 参考内容:http://blog.youkuaiyun.com/zxman660/article/details/7799827

一身都是月 572

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Io流的异常处理需要注意的点

今天学习了IO流,做了一个文件拷贝的练习,从这个练习中,我知道了在使用IO基本操作中,需要注意的一些地方,例如异常处理 package day__; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; i...

qq_45153480的博客 685

C++一些注意点之异常处理

几篇文章:(1)http://blog.youkuaiyun.com/daheiantian/article/details/6530318                                          (2)http://blog.chinaunix.net/uid-21411227-id-1826957.html       程序中的错误分为编译时的错误和运行时的错误。编译时的错误

继续微笑lsj 1940

.NET异常处理注意点

.NET异常处理注意点。在UI线程和工作线程中要处理所有的未处理异常。

流星之光的专栏 2304

C++异常处理和其注意点

处理异常的目的 在程序中出现非法操作时,可以防止程序崩溃。 异常的3个关键字 try:try包住可能出现异常的程序块 catch:捕捉并处理 throw:抛出异常 程序实例 #include <iostream> #include <string> using namespace std; int division() { int a = 10; int b = 0; if (b == 0) { //抛出异常 throw "123"; } r

quietbxj的博客 271

异常处理的时候finally语句中return注意点

return返回时不是直接返回变量的值,而是复制一份,然后返回。 对于基本类型的数据,在finally中改变return的值对与返回值是没有影响的;然而对于引用类型的数据会有影响。 package fianllyreturn; public class Test {     public static int testFinally(){         int result = 1

yuleichun的博客 863

Java语言中异常处理的注意点(二)

  异常处理小结: Java异常处理涉及到五个关键字:try、catch、throws、throw、finally。 异常处理流程由try、catch、finally3个代码块构成。其中try代码块包含了可能发生异常的程序代码;catch代 码块紧跟在try代码块后面,用来捕获并处理异常,finally代码块用于释放被占用的相关资源。 Exc...

rabbit_wd的专栏 441

Java异常处理、异常处理使用的一些注意点(例如,基类和子类捕获的顺序问题)

Java提供了两种错误的异常类,分别为Error和Exception,且它们拥有共同的父类——Throwable。 Error表示程序在运行期间出现了非常严重的错误,并且该错误是不可恢复的,由于这属于JVM层次的严重错误,因此这种错误是会导致程序终止执行的。此外,编译器不会检查Error是否被处理,因此在程序中不推荐去捕获Error类型的异常,主要原因是运行时异常多是由于逻辑错误导致的,

Dove_Knowledge的博客 2478

Java语言中异常处理的注意点(一)

两个关键字的区别——throws、throw throws子句声明可能会出现的异常。如果一个方法可能会出现异常,但是没有能力来处理这种异常,可以在方法的生命处用throws子句来声明抛出异常。 而throw语句用于抛出异常。throw语句用于抛出的对象必须是java.lang.Throwable类或其子类的实例。 ...

rabbit_wd的专栏 210

Java 异常处理:try-catch-finally 怎么用?避免 “吞异常” 的 3 个注意点

若在 try/catch 块中使用 return,需注意:finally 块会在 return 之前执行,若 finally 块修改返回值(或抛出异常),可能导致 try/catch 中的异常被忽略。上述代码中,finally 的异常会打断 catch 块的 return 流程,若日志未记录 catch 块的异常,会导致原始异常丢失。上述代码中,除零异常被捕获后未处理,若后续程序因 “result 未赋值” 出现问题,开发者无法关联到 “除零异常”,调试难度陡增。

qq_35694425的博客 829

使用mina传递对象注意问题点以及常见报错异常处理

最常见的异常,一个是不能序列化java.io.NotSerializableException:,另一个就是java.io.InvalidClassException,还有java.nio.charset.MalformedInputException   1. 首先是客户端和服务端的过滤器要一致,此问题容易导致异常:java.nio.charset.MalformedInputExcepti

MY的专栏 4243
上一篇: 冒泡排序
下一篇: 定制Eclipse IDE之界面篇
从不喝茶
博客等级 码龄12年 10粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值