理解Java里面的必检异常和非必检异常
問(wèn)題:理解Java里面的必檢異常和非必檢異常
Joshua Bloch在"Effective Java"里面說(shuō)過(guò)
在可恢復(fù)的條件下和編程錯(cuò)誤導(dǎo)致的運(yùn)行時(shí)錯(cuò)誤時(shí),使用必檢異常(第二版的第52頁(yè))
讓我們來(lái)看一下我對(duì)這個(gè)的正確理解吧
下面是我對(duì)必檢異常的理解
try{String userInput = //read in user inputLong id = Long.parseLong(userInput); }catch(NumberFormatException e){id = 0; //通過(guò)設(shè)置ID為0,來(lái)恢復(fù)這種情況 }1.上面的代碼是否能被看作必檢異常
2.運(yùn)行時(shí)異常是一個(gè)非必檢異常嗎?
下面是我對(duì)非必檢異常的一些理解
try{File file = new File("my/file/path");FileInputStream fis = new FileInputStream(file); }catch(FileNotFoundException e){//3. 這里我應(yīng)該干什么//我應(yīng)該 "throw new FileNotFoundException("File not found");"?//應(yīng)該寫日志嗎?//或者應(yīng)該 System.exit(0);? }為什么要把這個(gè)異常拋出?直接處理不是更快更好嗎?
6.我應(yīng)該直接拋出確切的異常還是使用Exception去覆蓋掉他
回答一
是不是必檢異常和你是否捕捉和你在捕獲異常的代碼塊里面干了什么無(wú)關(guān)。它是異常類的一種屬性。任何異常都是Exception類的一個(gè)子類(除了運(yùn)行時(shí)異常)并且它的子類都是必檢異常
Java的編譯器強(qiáng)制要求你捕獲異?;蛘咴诜椒ê灻莻€(gè)聲明。它們可以用來(lái)提高程序的安全性,但是大部分人認(rèn)為它不會(huì)帶來(lái)程序設(shè)計(jì)上的問(wèn)題
為什么要把這個(gè)異常拋出?直接處理不是更快更好嗎?
因?yàn)檫@是異常的完整內(nèi)容。如果沒(méi)有這種可能性,你就不需要這些異常了。它們能夠讓你在你選擇的層級(jí)去處理異常,而不是強(qiáng)制讓你在異常發(fā)生的底層級(jí)的方法里處理這些異常
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/6115896/understanding-checked-vs-unchecked-exceptions-in-java
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的理解Java里面的必检异常和非必检异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 做梦梦到天宫怎么回事
- 下一篇: 在Java 里面怎么比较字符串