首頁(yè) 考試吧論壇 Exam8視線(xiàn) 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱(chēng)英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專(zhuān)四專(zhuān)八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱(chēng)日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱(chēng)計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷(xiāo)員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢(xún)師考試 | 秘書(shū)資格 | 心理咨詢(xún)師考試 | 出版專(zhuān)業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱(chēng) | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢(xún)工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪(fǎng)談 | 游戲

2011年計(jì)算機(jī)等級(jí)考試二級(jí)JAVA學(xué)習(xí)精華整理(3)

考試吧整理了2011年計(jì)算機(jī)的等考二級(jí)JAVA學(xué)習(xí)精華,幫助考生備考。

  1.1.1.3 Java語(yǔ)言中兩種異常的差別

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

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

  一、機(jī)制上

  它們?cè)跈C(jī)制上的不同表現(xiàn)在兩點(diǎn):1.如何定義方法;2. 如何處理拋出的異常。請(qǐng)看下面CheckedException的定義:

  public class CheckedException extends Exception

  {

  public CheckedException() {}

  public CheckedException( String message )

  {

  super( message );

  }

  }

  以及一個(gè)使用exception的例子:

  public class ExceptionalClass

  {

  public void method1()

  throws CheckedException

  {

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

  }

  public void method2( String arg )

  {

  if( arg == null )

  {

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

  }

  }

  public void method3() throws CheckedException

  {

  method1();

  }

  }

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

  public static void main( String[] args )

  {

  ExceptionalClass example = new ExceptionalClass();

  try

  {

  example.method1();

  example.method3();

  }

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

  }

  在main()方法中,如果要調(diào)用method1(),你必須把這個(gè)調(diào)用放在try/catch程序塊當(dāng)中,因?yàn)樗鼤?huì)拋出Checked exception。

  相比之下,當(dāng)你調(diào)用method2()時(shí),則不需要把它放在try/catch程序塊當(dāng)中,因?yàn)樗鼤?huì)拋出的exception不是checked exception,而是runtime exception。會(huì)拋出runtime exception的方法在定義時(shí)不必聲明它會(huì)拋出exception。

  現(xiàn)在,讓我們?cè)賮?lái)看看method3()。它調(diào)用了method1()卻沒(méi)有把這個(gè)調(diào)用放在try/catch程序塊當(dāng)中。它是通過(guò)聲明它會(huì)拋出method1()會(huì)拋出的exception來(lái)避免這樣做的。它沒(méi)有捕獲這個(gè)exception,而是把它傳遞下去。實(shí)際上main()方法也可以這樣做,通過(guò)聲明它會(huì)拋出Checked exception來(lái)避免使用try/catch程序塊(當(dāng)然我們反對(duì)這種做法)。

  小結(jié)一下:

  * Runtime exceptions:

  在定義方法時(shí)不需要聲明會(huì)拋出runtime exception;

  在調(diào)用這個(gè)方法時(shí)不需要捕獲這個(gè)runtime exception;

  runtime exception是從java.lang.RuntimeException或java.lang.Error類(lèi)衍生出來(lái)的。

  * Checked exceptions:

  定義方法時(shí)必須聲明所有可能會(huì)拋出的checked exception;

  在調(diào)用這個(gè)方法時(shí),必須捕獲它的checked exception,不然就得把它的exception傳遞下去;

  checked exception是從java.lang.Exception類(lèi)衍生出來(lái)的。

  二、邏輯上

  從邏輯的角度來(lái)說(shuō),checked exceptions和runtime exception是有不同的使用目的的。checked exception用來(lái)指示一種調(diào)用方能夠直接處理的異常情況。而runtime exception則用來(lái)指示一種調(diào)用方本身無(wú)法處理或恢復(fù)的程序錯(cuò)誤。

  checked exception迫使你捕獲它并處理這種異常情況。以java.net.URL類(lèi)的構(gòu)建器(constructor)為例,它的每一個(gè)構(gòu)建器都會(huì)拋出MalformedURLException。MalformedURLException就是一種checked exception。設(shè)想一下,你有一個(gè)簡(jiǎn)單的程序,用來(lái)提示用戶(hù)輸入一個(gè)URL,然后通過(guò)這個(gè)URL去下載一個(gè)網(wǎng)頁(yè)。如果用戶(hù)輸入的URL有錯(cuò)誤,構(gòu)建器就會(huì)拋出一個(gè)exception。既然這個(gè)exception是checked exception,你的程序就可以捕獲它并正確處理:比如說(shuō)提示用戶(hù)重新輸入。

  再看下面這個(gè)例子:

  public void method()

  {

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

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

  }

  在運(yùn)行方法method()時(shí)會(huì)遇到ArrayIndexOutOfBoundsException(因?yàn)閿?shù)組numbers的成員是從0到2)。對(duì)于這個(gè)異常,調(diào)用方無(wú)法處理/糾正。這個(gè)方法method()和上面的method2()一樣,都是runtime exception的情形。上面我已經(jīng)提到,runtime exception用來(lái)指示一種調(diào)用方本身無(wú)法處理/恢復(fù)的程序錯(cuò)誤。而程序錯(cuò)誤通常是無(wú)法在運(yùn)行過(guò)程中處理的,必須改正程序代碼。

  總而言之,在程序的運(yùn)行過(guò)程中一個(gè)checked exception被拋出的時(shí)候,只有能夠適當(dāng)處理這個(gè)異常的調(diào)用方才應(yīng)該用try/catch來(lái)捕獲它。而對(duì)于runtime exception,則不應(yīng)當(dāng)在程序中捕獲它。如果你要捕獲它的話(huà),你就會(huì)冒這樣一個(gè)風(fēng)險(xiǎn):程序代碼的錯(cuò)誤(bug)被掩蓋在運(yùn)行當(dāng)中無(wú)法被察覺(jué)。因?yàn)樵诔绦驕y(cè)試過(guò)程中,系統(tǒng)打印出來(lái)的調(diào)用堆棧路徑(StackTrace)往往使你更快找到并修改代碼中的錯(cuò)誤。有些程序員建議捕獲runtime exception并紀(jì)錄在log中,我反對(duì)這樣做。這樣做的壞處是你必須通過(guò)瀏覽log來(lái)找出問(wèn)題,而用來(lái)測(cè)試程序的測(cè)試系統(tǒng)(比如Unit Test)卻無(wú)法直接捕獲問(wèn)題并報(bào)告出來(lái)。

  在程序中捕獲runtime exception還會(huì)帶來(lái)更多的問(wèn)題:要捕獲哪些runtime exception?什么時(shí)候捕獲?runtime exception是不需要聲明的,你怎樣知道有沒(méi)有runtime exception要捕獲?你想看到在程序中每一次調(diào)用方法時(shí),都使用try/catch程序塊嗎?

  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專(zhuān)題

       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案

       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢(xún)時(shí)間及入口

文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。