簡體   English   中英

為什么Java中的運行時異常“未選中”?

[英]Why are Runtime Exceptions “unchecked” in Java?

為什么運行時異常UnChecked是有意義的 (而不是如果它們被檢查 )?

如果不這樣做,則每次訪問數組元素時都必須使用try / catch塊,執行除法操作和許多其他常見方案。

換句話說,想象一下這段代碼:

Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334 / i;

我必須檢查ClassCastExceptionArrayIndexOutofBoundsExceptionArithmeticExceptionUnsupportedOperationExceptionNullPointerException

使用Java時,問題不是未經檢查的異常。 被檢查的例外是一個備受爭議的主題。 有人說這主要是用Java進行的實驗,在實踐中它們不起作用,但你會發現很多人認為它們很好。

然而,沒有人認為未經檢查的例外情況很糟糕。

Java中的兩種異常(已檢查和未檢查)的想法是,已檢查的異常應用於可合理預期會發生的錯誤條件,未經檢查的異常應用於意外錯誤條件。

例如,如果找不到文件,則會出現FileNotFoundException ,並且期望您的程序能夠處理這樣的條件是合理的。 未經檢查的異常應僅用於不應發生的問題,這實際上意味着如果發生此類問題,程序中存在錯誤。 例如, NullPointerException意味着您的程序試圖取消引用一個null的變量,這很可能是一個bug。

Java編譯器強制程序員處理已檢查的異常。 這使得編程語言更安全 - 這意味着程序員不得不考慮錯誤條件,這應該使程序更加健壯。

編譯器不會檢查未經檢查的異常,因為無論如何都不應該發生未經檢查的異常,如果這樣做,程序在運行時可以合理地執行任何操作; 程序員必須解決這個bug。

在Java中對這個功能提出了一些批評,有些人甚至將檢查過的異常稱為失敗的實驗 ,有些人建議從Java中刪除已檢查的異常

這只是意味着編譯器不會強制您查找異常,但您仍然可以在運行時拋出它。 作為一個好處,這允許您從類中拋出新的異常,而不需要您更改接口,從而導致調用者更改其代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM