netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

netbeans7.4

有许多例子说明Java异常处理可能比首次出现时要困难得多,Josh Bloch专门将一整章的《 Effective Java》 (两个版本)专门用于异常处理。 Java中的检查异常模型 仍然 “ 有争议” 。 我很高兴看到我最近下载的NetBeans 7.4 beta有一些提示,至少可以帮助您处理Java异常处理的一些细微差别。

我最近下载了NetBeans 7.4 Beta,并在笔记本电脑上安装了此最新版本的NetBeans 。 我下载了“所有”的NetBeans IDE下载包(包括GlassFish Server开源版4.0 , Apache Tomcat 7.0.41和Groovy支持)并将其安装在我的计算机上。

NetBeans的“当前开发版本”中“可能的错误”类别中的两个新提示是“'最终'块抑制异常”和“'抛出'在'最终'块中”。 在此博客文章中,我将演示这些提示并简要讨论为什么这些提示有助于改善异常处理。

'finally'块抑制异常

正如James Stauffer的 “ 不要在finally子句中返回 ”之类的帖子中所记录的,以及在Java的try-finally返回设计问题之类的论坛中所记录的那样,通常都认为从finally块中返回方法是一个坏主意。 接下来显示这种不良Java编码实践的示例。

最终阻止异常的示例

private void throwException() throws Exception
{throw new Exception("A checked exception!");
}/*** Demonstrate NetBeans hint "The 'return' statement in the 'finally' block* discards unhandled exceptions" by returning a value from the "finally"* block.* * @return Integer value that is really meaningless in this case.* @throws RuntimeException This exception is always thrown.*/
public int demonstrateReturnFromFinallyBlock()
{int value = 5;try{value = 7;throwException();}catch (Exception exception){throw new RuntimeException(exception);}finally{return value;}
}

当执行上述代码片段中的方法demonstrateReturnFromFinallyBlock()时,输出如下所示:

返回值:7

尽管可能有人期望demonstrateReturnFromFinallyBlock()方法抛出运行时异常,而不是返回7的整数值(因为该方法的Javadoc甚至做广告!),但实际上由于“ return”语句中的return语句,实际上丢弃了“始终抛出”异常。 finally挡住了。 这是一个潜在的令人讨厌的问题,可能仅在运行时而不是在编译时显而易见。 幸运的是,NetBeans 7.4 beta包含有关此潜在问题的提示,如以下屏幕快照所示:

演示ReturnFromFinallyExample

上面的屏幕快照演示了NetBeans 7.4 beta通过用黄色下划线在“ finally块中警告return语句的情况。 它还显示,当将鼠标悬停在带有黄色下划线的代码上时,NetBeans编辑器将提示“ finally”块中的“ return”语句将丢弃未处理的异常。”

通过将-Xlint:finally传递给javac编译器,也可以找到相同的条件。 显然,这可以在命令行上完成,就像我以前在javac的-Xlint Options中 javac.compilerargs=-Xlint:finally的一样,但是下一个屏幕快照显示了通过-Xlint:finally规范在NetBeans中所做的相同操作-Xlint:finally通过project.properties设置javac.compilerargs=-Xlint:finally

xlintFinallyWarningForReturnFromFinally

在“最终”块内“抛出”

finally块内部引发异常通常是一个坏主意,因为它将隐藏在该finally块的关联try块中引发的任何异常。 下一个代码清单显示了这种错误形式的示例。

/*** Demonstrate NetBeans hint warning that throwing an exception from a* 'finally' block is a bad idea because it hides the original exception.*/
public void demonstrateThrowFromFinallyBlock()
{Integer twoDividedByZero = null;try{twoDividedByZero = 2 / 0;}finally{if (twoDividedByZero == null){throw new RuntimeException("Cannot calculate quotient with division.");}}
}

有人可能会认为执行上述方法会导致引发ArithmeticException异常,而当引发更一般的(和父项) RuntimeException异常时,可能会感到有些惊讶。

下一个屏幕快照显示此情况的NetBeans 7.4 beta警告。

describeThrowFromFinallyHint

将鼠标悬停在带有黄色下划线的代码上会导致显示NetBeans警告:“'finally'块中的'throw'语句可能会隐藏原始异常。” 上面的屏幕快照显示,这正是在这种情况下发生的事情: ArithmeticException及其堆栈跟踪已被从finally块抛出的RuntimeException隐藏。

如果我注释掉从finally块引发异常的行,则原始异常将再次可用。 下一个屏幕快照对此进行了演示。

describeThrowFromFinallyHintGone

即使启用-Xlint:all (或仅启用-Xlint )也不会警告从finally块引发异常的不良形式。 在此特定示例中, -Xlint:devzero (或-Xlint:all-Xlint )将显示代码中被零除,但通常不存在-Xlint警告,要求javac从中抛出时发出警告finally块隐藏了原始异常。 这使该特定的NetBeans提示特别有用。

结论

Java异常处理中有许多细微差别和特殊情况。 NetBeans 7.4 Beta引入了两个新的“可能的错误”提示,警告与异常相关的finally块中的危险做法。 这两种情况特别隐蔽,因为它们通常不会被编译器捕获(尽管可以选择将其作为警告捕获),直到运行时才被发现,并且不太可能通过阅读和查看代码来发现。

参考: NetBeans 7.4 Beta提示警告我们的JCG合作伙伴 Dustin Marx在Inacted by Actual Events博客上进行了无效的异常处理 。

翻译自: https://www.javacodegeeks.com/2013/09/netbeans-7-4-beta-hints-warn-of-ineffective-exception-handling.html

netbeans7.4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2104 “我们的质检要做的是在厚度仅十几微米的电池隔膜上找出所有微小缺陷,如果没有检测出来,就很可能使新能源汽车的电池在使用过程中出现问题,甚至…

准确率超90%、1秒发出报警,人工智能助国网山东实现无人巡检(人工智能应用案例)

原文链接:https://mp.weixin.qq.com/s/Jh2YLY-4um79ucdHIs5NTg 众所周知,深度学习框架是人工智能的基础技术“底座”,在各大传统产业上也有着巨大的潜力尚待挖掘。5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的“…

基于PaddlePaddle实现高尔夫球场的遥感检测(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2103 1 . 背景及意义 随着高尔夫球运动在我国的兴起,关于高尔夫球场大量占用土地资源、污染环境、耗水量大且公益性差的争议越来越多。国家从2004年开始制定一系列相关政策…

MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现

firls函数功能 FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。 b = firls(n,f,a) b = firls(n,f,a,w) b = firls(n,f,a,ftype) b = firls(n,f,a,w,ftype)f是在0和1之间的范围内指定的频率点对的…

数电实验一-初识Multisim和Basys3

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一、实验目的 详见报告 二、实验仪器设备 详见报告 三、实验设计过程 使用Multisim为Basys3板卡创建一个PLD设计并进行验证。 1.创建P…

自动化学科前沿讲座作业 基于深度学习的工厂人员监测系统设计

1 背景及应用场景 在工业复杂生产环境下,作业人员的安全问题至关重要。大多数工业企业采用人眼观察视频的方式对作业人员位置进行判断,这种方式长时间会使管理者出现疲劳问题,效率非常低下,遇到安全问题也不能进行及时的处理。采用…

多重继承java_Java中的多重继承与组合vs继承

多重继承java有时我写了几篇有关Java 继承 , 接口和组成的文章。 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处。 Java中的多重继承 多重继承是创建具有多个超类的单个类的能力。 与其他一些流行的面向对象的编程语言&#…

数电实验二-点亮一个数码管(Multisim和Basys3 )

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践。 一、实验目的 详见报告 二、实验环境 详见报告 三、实验内容 (1)基本要求:以Basys3四位拨码开关SW3~SW0为输入…

倍福(Beckhoff)嵌入式控制器PLC

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 摘要:与家喻户晓的西门子相比,倍福&am…

fftw-3.3.8库在linux下的的编译和配置

关注公号【逆向通信猿】更精彩!!! 运行环境 Ubuntu 14.04版本以上,64位系统 FFTW库的下载 首先在官网上下载fftw-3.3.8.tar.gz压缩包,解压。本人下载好的压缩包地址:https://download.csdn.net/download/wlwdecs_dn/12904577 FFTW库的生成 首先,将压缩包进行解压,…

Spring Security with Spring Boot 2.0:密码编码器

在上一篇文章中,我们使用了用户详细信息服务,以便提供一种基于给定用户名从函数加载数据的方法。 用户详细信息的实现可能由内存机制,sql / no-sql数据库等支持。 选项是无限的。 关于密码存储,我们必须注意的是密码哈希。 出…

循环自相关函数和谱相关密度(三)——实信号、复信号模型下的BPSK信号循环谱MATLAB仿真结果及代码

关注公号【逆向通信猿】,循环谱 说明:接上一节循环自相关函数和谱相关密度(二)——实信号、复信号模型下的BPSK信号循环谱推导 7.5 仿真结果 7.5.1 实BPSK信号 符号速率RB = 40,采样率Fs = 960,载波频率fc = 300,符号数N = 1000,矩形成形。

executor线程池框架_如何使用Java 5 Executor框架创建线程池

executor线程池框架Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离。 如果要使用Java进行服务器端编程,则线程池是维护系统可伸缩性,鲁棒性和稳定性的重要概念。 对于那些不熟悉Java中的线程池或…

JavaFX技巧29:使布局忽略不可见的节点

在我仍在Swing中实现UI的时候,我曾经是MigLayout的忠实拥护者(“一个布局管理者来统治所有这些,对吗Mikael?”)。 我真正喜欢的功能之一是当组件不可见时可以定义不同的行为。 MigLayout允许我保留现在不可见的组件所占…

循环自相关函数和谱相关密度(五)——实信号、复信号模型下的QPSK信号循环谱MATLAB仿真结果及代码

关注公号【逆向通信猿】口令:循环谱 说明:接上一节循环自相关函数和谱相关密度(四)——实信号、复信号模型下的QPSK信号循环谱推导 8.4 仿真结果 8.4.1 实QPSK信号 符号速率RB = 40,采样率Fs = 960,载波频率fc = 300,符号数N = 1000,矩形成形,二倍载波频率为符号速…

C++判断是否为素数、求一个数的因数、质因数分解

判断一个数是否为素数 #include<iostream> #include<vector> #include<math.h> #include<algorithm>/*判断是否为素数*/ bool isprime(int n) {bool result;int k (int)sqrt((double)n); // 只需要循环到 √n 即可int i 0;for (i 2; i < k; i){…

第十一届蓝桥杯A组省赛填空试题 C: 蛇形填数(Java)

试题 C: 蛇形填数 本题总分&#xff1a;10 分 【问题描述】 如下图所示&#xff0c;小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。 容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列 的数是多少&#xff1f; 【答案提交】 这是一道结果填空的题&…

Collatz函数的C++递归实现

Collatz函数为(正)自然数定义如下&#xff1a;collatz(N)&#xff1a;如果n是偶数&#xff0c;则返回n/2&#xff0c;否则返回(n∗3)1 #include <iostream> int Collatz(int n) {if (n % 2 0)n / 2;elsen 3 * n 1;return n; }int main(int argc, char* argv[]) {if (…

AI+药物研发:人工智能赋能新药研发(人工智能应用案例)

首先&#xff0c;生物制药行业面临着两个挑战&#xff1a; 第一&#xff0c;新药研发周期很长且非常复杂&#xff1b; 第二&#xff0c;药物研发过程成本昂贵。在1950年的时候&#xff0c;十亿美元可以研发几十个药&#xff0c;到了2020年之后&#xff0c;十亿美元只能研发一个…

计算圆周率π的C++实现(任意精度)

π\piπ的计算公式 代码 #include <iostream> #include <corecrt_math_defines.h> #include <iomanip>double compute_pi(int N) //计算pi函数 {double dx 1.0 / N;double pi 0;for (int i 1; i < N; i){pi 2 * sqrt(1 - i * dx*i*dx); // 积分函数}…