java catch 空指针异常_关于Java:捕获空指针异常
我想問的是有關Java的多數知識,但我想它適用于許多語言。
考慮,
if(myVariable==null){
doSomethingAboutIt();
}
else carryOn(myVariable);
和
try{
carryOn(MyVariable);
}catch(NullPointerException e ){
doSOmethingAboutIt();}
這兩個代碼塊基本相同嗎? 是否有任何理由選擇第二種方法? 當然,myVariable永遠不會為空,但是似乎最好的檢查方法是執行簡單的if語句。
NullPointerException應該被視為程序員錯誤。 不要抓住他們。 確保它們永遠不會被拋出。
從我的立場來看,我不愿考慮這兩個代碼塊的意圖。當然,他們會經歷相同的錯誤處理,但這是開發人員的決定,而不是其他任何事情。
對我來說,if正在測試以查看是否可以使用值,如果不能使用,則可以解決該問題。 try...catch塊假定該值是有效的,如果不是有效的,它就會變通以解決異常行為。
當出現異常,程序中斷代碼(除以零等)時,應首先考慮異常。
不,這些代碼塊根本不一樣。
在第一個代碼塊中,您要檢查myVariable是否為null,并且僅在一個時間點執行此操作。稍后,myVariable可能會變成null,并最終拋出NullPointerException。如果發生這種情況,第二個代碼段將捕獲該異常,但第一個則不會。
此外,第二個代碼段將捕獲NullPointerExceptions,該NullPointerExceptions可能是由于carryOn(myVariable)調用而從調用堆棧中的任何位置拋出的。這真糟糕;您正在吞下一個例外,該例外是在特定變量可能完全是其他變量的情況下假設null運行的。
使用第一個代碼段。
一個分開的想法。 如果您正在捕獲任何運行時異常(例如NullPointerException),則可能是您做錯了什么。 以編程方式確定此類異常的來源非常困難,因此正確處理它們非常困難。
您僅將例外用于例外情況。使用第一段代碼,而不是第二段。
好吧,carryOn(MyVariable);本身不會拋出NPE,除非carryOn中的其他內容引用了空實例上的方法或屬性調用。
與捕獲異常相比,捕獲異常的計算量更大,因為生成異常需要生成堆棧跟蹤等。
我認為這也會導致"更干凈"的代碼。
也可以看看:
-Java try / catch性能,是否建議將try子句中的內容保持在最低限度?
-嘗試捕獲性能Java
第一種方法比捕獲異常更好,因為這會導致性能下降。我認為最好的方法是應用Null Object模式。 Guava庫提供了Optional類,您可以利用它而不是創建自己的類。
總結
以上是生活随笔為你收集整理的java catch 空指针异常_关于Java:捕获空指针异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 加载太慢_Vue首页加载过慢 解
- 下一篇: java http 状态_Java HT