首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 异常处理的 9 个最佳实践

在 Java 中,异常处理是个很麻烦的事情。初学者觉得它很难理解,甚至是经验丰富的开发者也要花费很长时间决定异常是要处理掉和抛出。 所以很多开发团队约定一些原则处理异常。...在这些情况下,一种常见的失误就是在 try 代码块的最后关闭资源。 ? 问题就是,只有没有异常抛出的时候,这段代码才可以正常工作。try 代码块内代码会正常执行,并且资源可以正常关闭。...使用 Finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。...当你在 try 子句中打开资源,资源会在 try 代码块执行后或异常处理后自动关闭。 ?...但你也应该在1-2个短句中解释异常的原因。这有助于你的运营团队了解问题的严重性,并且还可以让你更轻松地分析任何服务突发事件。 如果抛出一个特定的异常,它的类名很可能已经描述了这种错误。

81390

关于Java异常Exception最常见的十大问题1 受检异常 VS 非受检异常2 异常管理的最佳实践3 为什么在try语句中定义的变量不能在catch和finally语句中使用?4 为什么Doubl

1 受检异常 VS 非受检异常 简单的说,受检异常必须在方法中被显示的捕捉,或者在方法的throws语句中被抛出。...Paste_Image.png 2 异常管理的最佳实践 如果一个异常能够被正确的处理,那么他就该捕获,反之,则该被抛出 3 为什么在try语句中定义的变量不能在catch和finally语句中使用?...The code does not pass compilation 下面这段代码,string s定义在try语句块中,然后却在catch语句中使用了s,这段程序是无法通过编译的 try {...语句块中的exception会在哪里被throw出去,比如这个例子,我们知道如果要抛出FileNotFoundException,也是在头两句代码中,那么如果跑出了异常,异常产生地方,其后的代码都不会被执行...这就是为什么try语句中定义的变量不能在catch和finally语句中使用。

1.1K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 中的 `try-catch-finally` 与 `try-with-resource`

    谨慎使用return语句:在try块、catch块和finally块中使用return语句时要小心,确保逻辑正确并符合预期。...使用try-with-resources时,我们可以在try语句中声明一个或多个资源,并在代码块结束后自动关闭这些资源。资源的声明和初始化以分号分隔。...3、try-with-resources 中 try catch finally 三个代码块 在try-with-resources语句中,可以包含try块、catch块和finally块,它们的含义和作用...finally块:finally块中的代码在try块中的代码执行完毕后,无论是否发生异常,都会被执行。它通常用于执行一些必要的收尾操作,如释放资源、清理临时数据等。...只声明和初始化必要的资源:在try-with-resources语句中,只声明和初始化需要使用的资源。避免声明不必要的资源,以保持代码的清晰和简洁。

    8610

    Java 异常处理的 9 个最佳实践

    在这些情况下,一种常见的失误就是在 try 代码块的最后关闭资源。 ? 问题就是,只有没有异常抛出的时候,这段代码才可以正常工作。try 代码块内代码会正常执行,并且资源可以正常关闭。...但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。...使用 Finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。...当你在 try 子句中打开资源,资源会在 try 代码块执行后或异常处理后自动关闭。 ?...但你也应该在1-2个短句中解释异常的原因。这有助于你的运营团队了解问题的严重性,并且还可以让你更轻松地分析任何服务突发事件。 如果抛出一个特定的异常,它的类名很可能已经描述了这种错误。

    77720

    Java-异常

    try 语句块中有多个语句时,执行到某个语句产生异常时,此时这个try 语句块中其他的语句不再执行,直接到对应的catch语句,最后finally语句;如果代码块中有多个try语句时,一个try执行时catch...到异常,另一个try还会继续执行;如果一个try语句中没有捕获异常也要走finally语句 也可以不写trycatch 直接throws在方法抛出异常,当别人调这个方法的时候处理,别人也可以选择不处理继续...throws在方法抛出异常,main()方法也可以想向上抛出交给java运行时系统处理 try{...}语句指定了一段代码,该段代码就是一次捕获并处理异常的范围,在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象...它后面的catch语句要分别对这些异常做相应的处理,如果没有的catch代码都会被略过不执行 在catch语句中时对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象...无论try所指定的程序块中是否抛出异常,finally所指定的代码都要被执行。通常在finally语句中可以进行资源的清除工作。

    63710

    (25) 异常 (下) 计算机程序的思维逻辑

    为什么要重新抛出呢?因为当前代码不能够完全处理该异常,需要调用者进一步处理。 为什么要抛出一个新的异常呢?...具体来说: 如果没有异常发生,在try内的代码执行结束后执行。 如果有异常发生且被catch捕获,在catch内的代码执行结束后执行 如果有异常发生但没被捕获,则在异常被抛给上层之前执行。...try/catch/finally语法中,catch不是必需的,也就是可以只有try/finally,表示不捕获异常,异常自动向上传递,但finally中的代码在异常发生后也执行。...finally语句有一个执行细节,如果在try或者catch语句内有return语句,则return语句在finally语句执行结束后才执行,但finally并不能改变返回值,我们来看下代码: public...} } 这个函数的返回值是0,而不是2,实际执行过程是,在执行到try内的return ret;语句前,会先将返回值ret保存在一个临时变量中,然后才执行finally语句,最后try再返回那个临时变量

    71060

    Java 7新特性总结 - Coin项目新语言特性

    在switch语句中使用字符串 在Java 7之前,switch语句中的条件表达式的类型只能是与整数类型兼容的类型,包括基本类型char、byte、short和int,与这些基本类型对应的封装类Character...而在同样的场景中,如果某些配置项没有合法的默认值,必须要手工设置一个值,那么读取文件时出现的IOException就不应该在这个方法中处理。...消失的异常:在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行。但是finally语句块在执行的过程中,也可能会抛出异常。...如果资源初始化时或try语句中出现异常,而释放资源的操作正常执行,try语句中的异常会被抛出;如果try语句和释放资源都出现了异常,那么最终抛出的异常是try语句中出现的异常,在释放资源时出现的异常会作为被抑制的异常添加进去...够被try语句所管理的资源需要满足一个条件,那就是其Java类要实现java.lang.AutoCloseable接口,否则会出现编译错误。

    64310

    Java异常最常见的八大问题

    1.异常管理的最佳做法 如果可以正确处理异常,则应该被捕获,否则应该抛出异常。 2.为什么try中定义的变量不能用于catch或finally? 原因是你不知道在try块中哪里会抛出异常。...IllegalArgumentException ArrayIndexOutOfBoundsException 当条件不满足时,它们可用于if语句中 5.我们可以在同一个catch子句中捕获多个异常吗?...答案是肯定的。只要这些异常类可以追溯到类继承层次结构中的同一个超类,就可以只使用该超类。 6.构造函数可以在java中引发异常吗? 答案是肯定的。构造函数是一种特殊的方法。这是一个代码示例。...7.在最后条款中抛出异常 执行以下操作是合法的: public static void main(String[] args) { File file1 = new File("path1...,您应该将嵌入式try-catch块作为新方法进行包装,然后将方法调用放在finally子句中。

    38820

    RPA之PAD(Power Automate Desktop)组件开发

    另外,插件的DLL,是需要DLL 代码签名了。 默认采用个人签名,放到系统 受信任的根证书颁发机构 即可。 如果有钱,可以买个代码签名。...(另外可以参考官网路径下的语言包来看内部结构分析) 下图帧数大于300(重新录制部分,有兴趣查看原文看完整gif) 组件显示大致规则 组件的名字从哪里来 是从程序集信息里的AssemblyTitle...增加 _FriendlyName _Description _Summary 其中 FriendlyName 就是各种组件的主名称,Description就是提示语相当于,Summary就是关键信息,作用还是很明显的...SQL 语句中存在错误" Error_SqlStatementError_FriendlyName = "SQL 语句中的错误" ExecuteSqlStatement_ConnectionString_Description...问题处理 第一,中文不显示的问题,建议增加中文语言包,里面的名字要跟代码相匹配,具体可以参考示例。 第二,加载不出来,提示错误,可以根据错误提示修改,或者添加缺失的引用包。

    95610

    【Java入门】Java注释和关键字

    注释的含义:当我们写程序时需要对代码进行解释说明,这时我们就需要使用注释,以便于后期我们对之前敲过的代码还会有充分的了解。...IDEA的编码不一样,在command line arguments(命令行参数)里面,要添加以下内容 -encoding utf8 -docencoding utf8 -charset utf8...Java代码的方法 strictfp 使用此关键字声明会进行严格的计算 synchronized 用于多线程,保证只能有一个线程执行 transient 用transient修饰的变量不会保存在磁盘中...volatile Java虚拟机提供的轻量级同步机制 catch 捕获异常,通常与try连用 try 异常处理语句 finally 用于异常处理语句,被finally所指定的代码都要被执行 throw...,后期会详细进行讲解 如果有任何问题可以在评论区留言

    49020

    Python “异常处理机制” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

    题目4: else子句在try…except语句中是必需的,用于指定当没有异常发生时执行的代码。...题目5: finally子句在try…except语句中是可选的,它包含的代码无论是否发生异常都会执行。 题目6: 在Python中,可以使用raise关键字来手动抛出一个异常。...题目21: 在Python中,可以使用else子句在try…except语句中指定当没有异常发生时执行的代码,但else子句是必需的。...题目4: 错误 解析:else子句在try…except语句中是可选的,它用于指定当没有异常发生时执行的代码。不是每个try…except结构都必须有else子句。...不过,通常不建议修改异常对象的属性,因为这可能会导致异常处理逻辑变得复杂和难以维护。 题目21: 错误 解析:在try…except语句中,else子句是可选的,用于指定当没有异常发生时执行的代码。

    8010

    Python 自动化指南(繁琐工作自动化)第二版:三、函数

    根据错误消息中给出的行号,您知道spam()中的return语句导致了一个错误。 可以用try和except语句处理错误。可能有错误的代码放在一个try子句中。...如果发生错误,程序执行移动到下一个except子句的开始。 您可以将之前被零除的代码放在一个try子句中,并让一个except子句包含代码来处理这个错误发生时会发生什么。...,程序立即执行到except子句中的代码。...您可以在autbor.com/spamintry查看该程序的执行情况。永远不执行print(spam(1))的原因是,一旦执行跳转到except子句中的代码,就不会返回到try子句。...如果你在一个名为spam的模块中有一个名为bacon()的函数,导入spam后你会如何调用它? 当程序出错时,如何防止它崩溃? try子句中包含什么?except子句中包含什么?

    97220

    C语言:分支与循环

    ,必须是整形常量表达式 3、case 和后边的value之间必须有空格 4、每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。...只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,按顺序执行其他 case 语句中的代码,直到遇到...在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default...首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语 句,语句执⾏完后再继续判断,是否进行下⼀次判断。...所以在 do while 语句中循环体是⾄少执行⼀次的,这是 do while 循环比较特殊的地⽅。 练习:输⼊⼀个正整数,计算这个整数是⼏位数?

    17710

    Java——你真的了解Java异常处理机制吗?

    当遇 到try或catch中return或throw之类可以终止当前方法的代码时,jvm会先去执行finally中的语 句,当finally中的语句执行完毕后才会返回来执行try/catch中的return...如果 finally中有return或throw,那么将执行这些语句,不会在执行try/catch中的return或throw语 句。finally块中一般写的是关闭资源之类的代码。...但是我们一般不在finally语句中加入return 语句,因为他会覆盖掉try中执行的return语句。...异常处理流程 程序先执行 try 中的代码 如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配....上面想法有三个错误: 1.异常机制设计的初衷是用来处理不正常的情况,所以JVM很少对它们进行优化。 2.代码放在try…catch中反而阻止jvm本身要执行的某些特定优化。

    63410

    C语言——分支与循环

    引言 由前面的知识我们可以知道C语⾔是一种结构化的程序设计语⾔,这⾥的结构包括顺序结构、选择结构、循环结构,在C语言中我们可以使⽤ if 、 switch语句 实现分⽀结构,使⽤ for 、...6.switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏...其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。...、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。...所以在 do while 语句中 循环体是⾄少执行⼀次。

    7210

    有return的情况下try catch finally的执行顺序(最有说服力的总结)

    结论: 1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的...(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; 4、finally中最好不要包含...中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码, 最后执行catch块中return. finally之后也就是...分析: 在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。...在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果, 因此,即使finally中对变量x进行了改变,但是不会影响返回结果。

    28630

    包教包会,7段代码带你玩转Python条件语句

    异常是程序在正常流程控制以外采取的动作,当它被引发时,计算机将自动寻找异常处理程序,以帮助程序恢复正常运行。 要保证程序的正常运行,就需要排除错误,错误要么是语法上的,要么是逻辑上的。...无默认值 运行try-except-else语句时,程序首先执行try代码块,即可能出错的试探性语句,这可能导致致命性错误使得程序无法继续执行;如果try代码块确实无法执行,就可能执行某个except代码块...这也是在Python Shell中执行程序错误后所出现的出错打印信息的由来。 在try语句中,except与else代码块都是可选的。except代码块可以有0或多个;else代码块可以有0或1个。...但要注意,else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。...try语句中没有else时,就构成try-except语句,如代码清单⑤所示。

    2.5K10
    领券