乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java異常處理

       昵稱18593886 2014-07-17

        java異常處理機制主要依賴于try,catch,finally,throwthrows五個關鍵字。

      try 關鍵字后緊跟一個花括號括起來的代碼塊,簡稱try塊。同理:下面的也被稱為相應的塊。

      它里面可置引發(fā)異常的代碼。catch后對應異常類型和一個代碼塊,用于表明catch塊用于處理這種類型的代碼塊。后還可以跟一個finally塊,finally塊用于回收在try塊里打開的物理資源,異常機制會保證finally塊總被執(zhí)行。throws關鍵字主要在方法簽名中使用,用于聲明該方法可能拋出的異常,而throw則用于拋出一個實際的異常,throw可以單獨作為語句使用,拋出一個具體的異常的對象

        java異常處理可以讓程序具有更好的容錯性,程序更加健壯。當程序 出現(xiàn)意外情形時,系統(tǒng)會自動生成一個Exception對象來通知程序,從而實現(xiàn)將“業(yè)務功能實現(xiàn)代碼”和“錯誤處理代碼”分離,提供更好的可讀性。

        如果執(zhí)行try塊里的業(yè)務邏輯代碼時出現(xiàn)異常,系統(tǒng)自動會生成一個異常對象,該異常對象被提交給java運行環(huán)境,這個過程被稱為拋出(throw)異常。當java運行環(huán)境收到異常對象時,會尋找處理該異常對象的catch塊,如果找到合適的catch塊并把該異常交給它處理,該過程被稱為捕獲異常;如果java運行環(huán)境找不到捕獲異常的catch塊,則運行環(huán)境終止,程序也將退出。

        使用finally回收物理資源

        當程序在try塊里打開了的一些物理資源(數(shù)據(jù)庫連接,網(wǎng)絡連接及磁盤文件),這些物理資源必須顯示回收。

        為了保證一定能夠回收try塊中打開的物理資源,異常處理機制提供了finally塊,無論try塊中的代碼是否出現(xiàn)異常,也不管在哪個catch塊中被執(zhí)行,finally塊總會被執(zhí)行。異常處理結構語法中只有try塊是必須的,一旦沒有try塊,則不能出現(xiàn)catchfinally塊,如果存在try塊,則catch塊和finally塊都是可選的。但二者至少要出現(xiàn)其一。也可以同時出現(xiàn)多個catch塊。catch塊必須位于try塊后面,而finally必須位于catch塊后面(如果存在的話);

        當java程序執(zhí)行try塊,catch塊,時遇到了return語句或throw語句,這兩個語句都會導致該方法的立即結束,但是系統(tǒng)并不會立即執(zhí)行這兩個語句,而是去尋找該異常處理流程中是否包含finally塊,如果沒有finally塊程序立即執(zhí)行return語句或throw語句,方法終止。反之,則系統(tǒng)會立即執(zhí)行finally塊——只有當finally塊執(zhí)行完后,系統(tǒng)才會再次跳回來執(zhí)行try塊,catch塊里的returnthrow語句,如果同時在 finally塊中也存在returnthrow語句,則finally塊已經(jīng)終止了方法,自然不存在系統(tǒng)再次跳轉去執(zhí)行trycatch塊里的returnthrow語句。

        使用throws聲明拋出異常的思路是:當前方法不知道應該如何處理這種異常,該異常應該由上一級調(diào)用者處理,如果main方法也不知道如何處理這種異常類型。也可以使用throws聲明拋出異常,把該異常交給javaJVM處理。

        JVM對異常的處理方法:打印異常跟蹤棧信息,并終止程序運

      runtime exceptionchecked exception

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

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

       * Runtime exceptions: 

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

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

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

        * Checked exceptions: 

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

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

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

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

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

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

      針對 RuntimeException 類型的異常, javac 是無法通過編譯時的靜態(tài)語法檢測來判斷到底哪些函數(shù)(或哪些區(qū)域的代碼)可能拋出這類異常(這完全取決于運行時狀態(tài),或者說運行態(tài)所決定的)理解為non_checked可以?,也正因為如此, Java 異常處理模型中的“ must be caught or declared to be thrown ”規(guī)則也不適用于 RuntimeException (所以才有前面所提到過的奇怪編譯現(xiàn)象,這也屬于特殊規(guī)則吧)。但是, Java 虛擬機卻需要有效地捕獲并處理此類異常。當然, RuntimeException 也可以被程序員顯式地拋出,而且為了程序的可靠性,對一些可能出現(xiàn)“運行時異常( RuntimeException )”的代碼區(qū)域,程序員最好能夠及時地處理這些意外的異常,也即通過 catch(RuntimeExcetion) catch(Exception) 來捕獲它們。

      總結:

      所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:ErrorException。error表示恢復不是不可能但很困難情況下的一種嚴重的問題。比如說內(nèi)存溢出,不可能指望程序處理這樣的情況,exception表示一種設計或實現(xiàn)問題,也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。

      異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見的運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出為被捕獲的運行時異常。

       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多