日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

NetBeans 7.4 Beta提示警告无效的异常处理

發(fā)布時間:2023/12/3 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NetBeans 7.4 Beta提示警告无效的异常处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有許多例子說明Java異常處理可能比首次出現(xiàn)時要困難得多,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的“當(dāng)前開發(fā)版本”中“可能的錯誤”類別中的兩個新提示是“'最終'塊抑制異常”和“'拋出'在'最終'塊中”。 在此博客文章中,我將演示這些提示并簡要討論為什么這些提示有助于改善異常處理。

'finally'塊抑制異常

正如James Stauffer的 “ 不要在finally子句中返回 ”之類的帖子中所記錄的,以及Java的try-finally返回設(shè)計問題之類的論壇中所記錄的那樣,通常都認為從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;} }

當(dāng)執(zhí)行以上代碼片段中的方法demonstrateReturnFromFinallyBlock()時,輸出如下所示:

返回值:7

盡管可能有人期望demonstrateReturnFromFinallyBlock()方法拋出運行時異常,而不是返回7的整數(shù)值(因為該方法的Javadoc甚至做廣告!),但實際上由于“ return”語句中的return語句,實際上丟棄了“始終拋出”異常。 finally擋住了。 這是一個潛在的令人討厭的問題,可能僅在運行時而不是在編譯時才明顯。 幸運的是,NetBeans 7.4 beta包含有關(guān)此潛在問題的提示,如以下屏幕快照所示:

上面的屏幕快照演示了NetBeans 7.4 beta通過在黃色塊中加下劃線來警告finally塊中的return語句的情況。 它還顯示,當(dāng)將鼠標懸停在帶有黃色下劃線的代碼上時,NetBeans編輯器將提示“ finally”塊中的“ return”語句將丟棄未處理的異常。”

通過將-Xlint:finally傳遞給javac編譯器,也可以找到相同的條件。 顯然,這可以在命令行上完成,就像我以前在javac的-Xlint Options中 javac.compilerargs=-Xlint:finally的一樣,但是下一個屏幕快照顯示了通過-Xlint:finally規(guī)范在NetBeans中所做的相同操作-Xlint:finally通過project.properties設(shè)置javac.compilerargs=-Xlint:finally 。

在“最終”塊內(nèi)“拋出”

從finally塊內(nèi)部引發(fā)異常通常是一個壞主意,因為它將隱藏在該finally塊的關(guān)聯(lián)try塊中引發(fā)的任何異常。 下一個代碼清單顯示了這種錯誤形式的示例。

/*** 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.");}} }

有人可能認為執(zhí)行上述方法會導(dǎo)致引發(fā)ArithmeticException異常,而當(dāng)引發(fā)更一般的(和父項) RuntimeException異常時,可能會感到有些驚訝。

下一個屏幕快照顯示此情況的NetBeans 7.4 beta警告。

將鼠標懸停在帶有黃色下劃線的代碼上會顯示NetBeans警告:“'finally'塊中的'throw'語句可能會隱藏原始異常。” 上面的屏幕快照顯示了這正是在這種情況下發(fā)生的情況: ArithmeticException及其堆棧跟蹤被finally塊拋出的RuntimeException隱藏了。

如果我注釋掉從finally塊拋出異常的行,則原始異常將再次可用。 下一個屏幕快照對此進行了演示。

即使啟用-Xlint:all (或僅啟用-Xlint )也不會警告從finally塊引發(fā)異常的不良形式。 在此特定示例中, -Xlint:devzero (或-Xlint:all或-Xlint )將顯示代碼中被零除,但通常沒有-Xlint警告讓javac從中拋出時警告您finally塊隱藏了原始異常。 這使該特定的NetBeans提示特別有用。

結(jié)論

Java異常處理中有許多細微差別和特殊情況。 NetBeans 7.4 Beta引入了兩個新的“可能的錯誤”提示,警告與異常相關(guān)的finally塊中的危險做法。 這兩種情況特別隱蔽,因為它們通常不會被編譯器捕獲(盡管可以選擇將其作為警告捕獲),直到運行時才被發(fā)現(xiàn),并且不太可能通過閱讀和查看代碼來發(fā)現(xiàn)。

參考: 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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的NetBeans 7.4 Beta提示警告无效的异常处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。