黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

首頁考試吧論壇Exam8視線考試商城網絡課程模擬考試考友錄實用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓 自學考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務 員
導游考試
物 流 師
出版資格
單 證 員
報 關 員
外 銷 員
價格鑒證
網絡編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業培訓
社會工作者
銀行從業
教師資格
營養師
保險從業
普 通 話
證券從業
跟 單 員
秘書資格
電子商務
期貨考試
國際商務
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業水平
衛生資格 執業醫師 執業藥師 執業護士
會計從業資格
基金從業資格
統計從業資格
經濟師
精算師
統計師
會計職稱
法律顧問
ACCA考試
注冊會計師
資產評估師
審計師考試
高級會計師
注冊稅務師
國際內審師
理財規劃師
美國注冊會計師
一級建造師
安全工程師
設備監理師
公路監理師
公路造價師
二級建造師
招標師考試
物業管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質量工程師
巖土工程師
造價員考試
注冊計量師
環保工程師
化工工程師
咨詢工程師
結構工程師
城市規劃師
材料員考試
監理工程師
房地產估價
土地估價師
安全評價師
房地產經紀人
投資項目管理師
環境影響評價師
土地登記代理人
繽紛校園 實用文檔 英語學習 作文大全 求職招聘 論文下載 訪談|游戲
計算機等級考試
您現在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > JAVA > 復習資料 > 正文

2013年計算機等考二級JAVA學習精華整理(3)

來源:考試吧Exam8.com) 2013-1-29 15:38:15 考試吧:中國教育培訓第一門戶 模擬考場

  1.1.1.3 Java語言中兩種異常的差別

  Java提供了兩類主要的異常:runtime exception和checked exception。所有的checked exception是從java.lang.Exception類衍生出來的,而runtime exception則是從java.lang.RuntimeException或java.lang.Error類衍生出來的。

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

  一、機制上

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

  public class CheckedException extends Exception

  {

  public CheckedException() {}

  public CheckedException( String message )

  {

  super( message );

  }

  }

  以及一個使用exception的例子:

  public class ExceptionalClass

  {

  public void method1()

  throws CheckedException

  {

  // ... throw new CheckedException( “...出錯了“ );

  }

  public void method2( String arg )

  {

  if( arg == null )

  {

  throw new NullPointerException( “method2的參數arg是null!” );

  }

  }

  public void method3() throws CheckedException

  {

  method1();

  }

  }

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

  public static void main( String[] args )

  {

  ExceptionalClass example = new ExceptionalClass();

  try

  {

  example.method1();

  example.method3();

  }

  catch( CheckedException ex ) { } example.method2( null );

  }

  在main()方法中,如果要調用method1(),你必須把這個調用放在try/catch程序塊當中,因為它會拋出Checked exception。

  相比之下,當你調用method2()時,則不需要把它放在try/catch程序塊當中,因為它會拋出的exception不是checked exception,而是runtime exception。會拋出runtime exception的方法在定義時不必聲明它會拋出exception。

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

  小結一下:

  * Runtime exceptions:

  在定義方法時不需要聲明會拋出runtime exception;

  在調用這個方法時不需要捕獲這個runtime exception;

  runtime exception是從java.lang.RuntimeException或java.lang.Error類衍生出來的。

  * Checked exceptions:

  定義方法時必須聲明所有可能會拋出的checked exception;

  在調用這個方法時,必須捕獲它的checked exception,不然就得把它的exception傳遞下去;

  checked exception是從java.lang.Exception類衍生出來的。

  二、邏輯上

  從邏輯的角度來說,checked exceptions和runtime exception是有不同的使用目的的。checked exception用來指示一種調用方能夠直接處理的異常情況。而runtime exception則用來指示一種調用方本身無法處理或恢復的程序錯誤。

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

  再看下面這個例子:

  public void method()

  {

  int [] numbers = { 1, 2, 3 };

  int sum = numbers[0] numbers[3];

  }

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

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

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

1 2  下一頁
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 中文字幕日韩一区二区 | 热久久精品免费视频 | 美女视频黄的全免费网站 | 二个人的视频www | 国产三级网站 | 日韩亚洲制服丝袜中文字幕 | 日韩在线视频不卡 | 91香蕉视频破解版 | 一区二区三区在线 | 网站 | 在线日韩欧美 | 香蕉视频网页版 | 国产午夜精品理论片久久影视 | 小明成人看看 | 老司机午夜视频 | 狼伊千合综网中文 | 综合视频网 | 日产免费自线一二 | 亚洲视频在线免费观看 | 五月综合激情 | 午夜影院小视频 | 91看片在线 | 日本一区二区三区在线看 | 伊人久久五月天 | 波多野结衣一区二区 | 日日摸狠狠的摸夜夜摸 | 日韩一区二区在线视频 | 欧美日韩中文字幕免费不卡 | 成人毛片在线观看 | 亚洲影视天堂 | 天天摸天天躁天天添天天爽 | 欧美精品免费专区在线观看 | 欧美黄色a| 成人免费福利视频 | 特级黄色毛片 | 精品一区二区三区视频在线观看 | 国产成人在线影院 | 亚洲成综合人影院在院播放 | 午夜寂寞影 | 亚洲欧美专线 | 国产操操操 | 一区二区三区国产 |