日本粉色视频-日本理论片中文在线观看2828-日本理论在线观看被窝网-日本黄大片在线观看-国产精品福利在线观看秒播-国产精品福利资源在线

北京北大青鳥校區(qū)專家分析:兩類Java的主要異常

北京北大青鳥校區(qū)學術部提供:

Java提供了兩類主要的異常:runtime exception和checked exception。所有的checked exception是從java.lang.Exception類衍生出來的,而runtime exception則是從java.lang.RuntimeException或java.lang.Error類衍生出來的。 (北京北大青鳥校區(qū)

它們的不同之處表現(xiàn)在兩方面:機制上和邏輯上。

一、機制上
它們在機制上的不同表現(xiàn)在兩點:1.如何定義方法;2. 如何處理拋出的異常。請看下面CheckedException的定義:


以及一個使用exception的例子:

你可能已經(jīng)注意到了,兩個方法method1()和method2()都會拋出exception,可是只有method1()做了聲明。另外,method3()本身并不會拋出exception,可是它卻聲明會拋出CheckedException。在向你解釋之前,讓我們先來看看這個類的main()方法: (北京北大青鳥校區(qū)


在main()方法中,如果要調(diào)用method1(),你必須把這個調(diào)用放在try/catch程序塊當中,因為它會拋出Checked exception。 (北京北大青鳥校區(qū)

相比之下,當你調(diào)用method2()時,則不需要把它放在try/catch程序塊當中,因為它會拋出的exception不是checked exception,而是runtime exception。會拋出runtime exception的方法在定義時不必聲明它會拋出exception。 (北京北大青鳥校區(qū)

現(xiàn)在,讓我們再來看看method3()。它調(diào)用了method1()卻沒有把這個調(diào)用放在try/catch程序塊當中。它是通過聲明它會拋出method1()會拋出的exception來避免這樣做的。它沒有捕獲這個exception,而是把它傳遞下去。實際上main()方法也可以這樣做,通過聲明它會拋出Checked exception來避免使用try/catch程序塊(當然我們反對這種做法)。 (北京北大青鳥校區(qū)

小結一下:
* Runtime exceptions:
在定義方法時不需要聲明會拋出runtime exception;
在調(diào)用這個方法時不需要捕獲這個runtime exception;
runtime exception是從java.lang.RuntimeException或java.lang.Error類衍生出來的。 (北京北大青鳥校區(qū)
* Checked exceptions:
定義方法時必須聲明所有可能會拋出的checked exception;
在調(diào)用這個方法時,必須捕獲它的checked exception,不然就得把它的exception傳遞下去;
checked exception是從java.lang.Exception類衍生出來的。 (北京北大青鳥校區(qū)

二、邏輯上
從邏輯的角度來說,checked exceptions和runtime exception是有不同的使用目的的。checked exception用來指示一種調(diào)用方能夠直接處理的異常情況。而runtime exception則用來指示一種調(diào)用方本身無法處理或恢復的程序錯誤。 (北京北大青鳥校區(qū)

checked exception迫使你捕獲它并處理這種異常情況。以java.net.URL類的構建器(constructor)為例,它的每一個構建器都會拋出MalformedURLException。MalformedURLException就是一種checked exception。設想一下,你有一個簡單的程序,用來提示用戶輸入一個URL,然后通過這個URL去下載一個網(wǎng)頁。如果用戶輸入的URL有錯誤,構建器就會拋出一個exception。既然這個exception是checked exception,你的程序就可以捕獲它并正確處理:比如說提示用戶重新輸入。 (北京北大青鳥校區(qū)
再看下面這個例子:

在運行方法method()時會遇到ArrayIndexOutOfBoundsException(因為數(shù)組numbers的成員是從0到2)。對于這個異常,調(diào)用方無法處理/糾正。這個方法method()和上面的method2()一樣,都是runtime exception的情形。上面我已經(jīng)提到,runtime exception用來指示一種調(diào)用方本身無法處理/恢復的程序錯誤。而程序錯誤通常是無法在運行過程中處理的,必須改正程序代碼。 (北京北大青鳥校區(qū))

總而言之,在程序的運行過程中一個checked exception被拋出的時候,只有能夠適當處理這個異常的調(diào)用方才應該用try/catch來捕獲它。而對于runtime exception,則不應當在程序中捕獲它。如果你要捕獲它的話,你就會冒這樣一個風險:程序代碼的錯誤(bug)被掩蓋在運行當中無法被察覺。因為在程序測試過程中,系統(tǒng)打印出來的調(diào)用堆棧路徑(StackTrace)往往使你更快找到并修改代碼中的錯誤。有些程序員建議捕獲runtime exception并紀錄在log中,我反對這樣做。這樣做的壞處是你必須通過瀏覽log來找出問題,而用來測試程序的測試系統(tǒng)(比如Unit Test)卻無法直接捕獲問題并報告出來。  (北京北大青鳥校區(qū))

在程序中捕獲runtime exception還會帶來更多的問題:要捕獲哪些runtime exception?什么時候捕獲?runtime exception是不需要聲明的,你怎樣知道有沒有runtime exception要捕獲?你想看到在程序中每一次調(diào)用方法時,都使用try/catch程序塊嗎?  (北京北大青鳥校區(qū))


 

北大青鳥網(wǎng)上報名
北大青鳥招生簡章
主站蜘蛛池模板: 免费在线观看黄色毛片 | 久久欧美精品欧美久久欧美 | 九九精品激情在线视频 | 免费看a网站 | 97在线视频免费播放 | 女人抠逼视频 | cao美女| 97超在线 | 美女把张开腿男生猛戳免费视频 | 日韩高清免费观看 | 国产精品毛片久久久久久久 | 日日狠狠久久偷偷四色综合免费 | 国产精品美女久久久久网站 | 在线看片日韩 | 亚洲一区亚洲二区 | 欧美日韩在线第一页 | 91视频一区 | 一级日韩一级欧美 | 亚洲精品国产精品国自产 | 日韩国产免费 | 美女mm131爽爽爽免费视色 | 狠狠色综合久久丁香婷婷 | 91精品成人免费国产片 | 99九九国产精品免费视频 | 日韩精品一区二区三区中文在线 | 18视频免费网址在线观看 | 中国女人真人一级毛片 | 日本亚洲欧美国产日韩ay高清 | 亚洲七七久久精品中文国产 | 在线步兵区 | 男人的天堂在线观看免费 | 久久亚洲精品中文字幕 | 日本一级特黄毛片高清视频 | 久夜色精品国产一区二区三区 | 夜色精品国产一区二区 | 亚洲免费片 | 久久2017| 免费网站看v片在线香蕉 | 欧美影院网站视频观看 | a一级免费 | 日韩中文字幕免费在线观看 |