<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    和風細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

    異常機制概述

    異常機制綜述

    在運行過程中,應用程序可能遭遇各種嚴重程度不同的問題.異常提供了一種在不弄亂程序的情況下檢查錯誤的巧妙方式.它也提供了一種直接報告錯誤的機制,而不必檢查標志或者具有此作用的域.異常把方法能夠報告的錯誤作為方法約定的一個顯式部分.
    異常能夠被程序員看到,由編譯器檢查,并且由重載方法的子類保留.
    如果遇到意外的錯誤將拋出異常,然后異常被方法調用棧上的子句捕獲.如果異常未被捕獲,將導致執行線程的終止.

    異常的體系結構

    毫無疑問,在java中異常是對象,它必定繼承Throwable及其子類.Throwable中含有一個用于描述異常的字符串.Exception是Throwable的一個最常用子類,另一個子類是Error.而RuntimeException繼承自Exception.


    異常的種類

    非檢查型異常(Unchecked Exception):
    非檢查型異常反映了程序中的邏輯錯誤,不能從運行中合理恢復.
    標準的運行時異常和錯誤構成非檢查型異常,它們繼承自RuntimeException和Error.
    非檢查型異常不用顯示進行捕獲.

    檢查型異常(Checked Exception):
    這種異常描述了這種情況,雖然是異常的,但被認為是可以合理發生的,如果這種異常真的發生了,必須調用某種方法處理.
    Java異常大多是檢查型異常,繼承自Exception類,你自己定義的異常必須是繼承Exception的檢查型異常.
    檢查型異常必須進行顯示捕獲.

    自定義異常

    繼承Exception即可定義自己的異常,以下是一種常見寫法
    public class DBXmlFileReadException extends Exception{
      public DBXmlFileReadException(String   msg){
        super(msg);
      }
    }

    拋出異常

    在Java語句中,可以用throw語句拋出異常,如throw new NoSuchElementException();
    拋出的對象必須是Throwable類的子類型.

    拋出異常的策略:
    1) 如果拋出后不可能得到處理,可以拋出Error.
    2) 如果你想讓其它類自由選擇是否處理這個異常,就可以拋出RuntimeException.
    3) 如果你要求類的用戶必須處理這個異常,則可以拋出Exception.

    異常拋出后的控制權轉移

    一旦發生異常,異常發生點后的動作將不會發生.此后將要發生的操作不是在catch塊和finally塊.

    當異常拋出時,導致異常發生的語句和表達式就被稱為突然完成.語句的突然完成將導致調用鏈逐漸展開,直到該異常被捕獲.

    如果該異常沒有捕獲,執行線程將中止.

    Try,catch和finally

    異常由包含在try塊中的語句捕獲:
        try{
          正常執行語句
        }
        catch(XException e){
          異常執行語句一
        }
        catch(XXException e){
          異常執行語句二
        }
        catch(XXXException e){
          異常執行語句三
        }
        finally{
          中止語句
        }

    Try中的語句體要么順利完成,要么執行到拋出異常.
    如果拋出異常,就要找出對應于異常類或其父類的catch子句,如果未能找到合適的catch子句,異常就從try語句中擴散出來,進入到外層可能對它進行處理的try語句.
    Catch子句可以有多個,只要這些子句捕獲的異常類型不同.
    如果在try中有finally子句,其代碼在try把所有其它處理完成之后執行.
    無論是正常完成或是出現異常,甚至是通過return或者break這樣的控制語句結束,finally子句總是被執行.
    Catch子句和finally子句在try語句之后至少有一個,不要求全部出現.

    More…

    在catch語句中捕獲通用的異常Exception通常不是最佳策略,因為它會將所有異常進行等同處理.
    不能把基類異常的catch語句放到子類異常的catch語句之前,編譯器會在運行之前就檢查出這樣的錯誤.
    Try…catch對每個catch語句都從頭到尾檢查,如果找到處理同類異常的catch子句,此catch塊中的語句將得以執行,而不再處理同層次的其它catch塊.
    如果catch或finally拋出另一個異常,程序將不會再去檢查try的catch子句.
    Try...catch語句可以嵌套,內層拋出的異常可被外層處理.

    Throws子句

    函數能拋出的檢查型異常用throws聲明,它后面可以是帶用逗號隔開的一系列異常類型.僅僅那些在方法中不被捕獲的異常必須列出.

    private void readObject(java.io.ObjectInputStream s)
            throws java.io.IOException, ClassNotFoundException {
            // Read in any hidden serialization magic
            s.defaultReadObject();

            // Read in size
            int size = s.readInt();

            // Initialize header
            header = new Entry<E>(null, null, null);
            header.next = header.previous = header;

            // Read in all elements in the proper order.
            for (int i=0; i<size; i++)
                 addBefore((E)s.readObject(), header);
            }
    }

    More…

    Throws子句的約定是嚴格強制性的,只能拋出throws子句中聲明的異常類型,拋出其它類型的異常是非法的,不管是直接利用throw,還是調用別的方法間接的拋出.
    RuntimeException和Error是僅有的不必由throws子句列出的異常.
    調用函數的函數要么處理對聲明的異常進行處理,要么也聲明同樣的異常,將收到的異常拋向上層.

    對檢查型異常通常進行的幾種處理
    1) 用e.printStackTrace()輸出異常信息.
    2) 將異常記錄到日志中以備查,如logger.error(e.getMessage()).
    3) 試圖進行異常恢復.
    4) 告知維護者和用戶發生的情況.

    posted on 2008-02-21 20:09 和風細雨 閱讀(251) 評論(0)  編輯  收藏 所屬分類: J2SE

    主站蜘蛛池模板: 亚洲国产成人在线视频| 国产成人精品日本亚洲专区| 5555在线播放免费播放| 2019中文字幕在线电影免费 | 中文字幕 亚洲 有码 在线| 国产亚洲精aa在线看| 一级特级aaaa毛片免费观看 | 在线观看亚洲专区| 免费一区二区无码东京热| 免费视频爱爱太爽了| 免费吃奶摸下激烈视频| 亚洲av无码乱码国产精品fc2| 亚洲精品自在线拍| 国产99久久亚洲综合精品| 亚洲精品NV久久久久久久久久| 亚洲春色在线观看| 两个人的视频www免费| 国产精品免费看久久久| 成全高清视频免费观看| 亚洲综合无码精品一区二区三区| 亚洲情A成黄在线观看动漫软件| 成年女人男人免费视频播放| 性色av极品无码专区亚洲| 亚在线观看免费视频入口| 亚洲av成人一区二区三区在线观看| 91亚洲国产在人线播放午夜| 72pao国产成视频永久免费| 国产成人高清精品免费软件| 少妇中文字幕乱码亚洲影视| 日韩大片免费观看视频播放| 99精品国产免费久久久久久下载| 亚洲国产精品嫩草影院在线观看| 成人a毛片视频免费看| 亚洲狠狠久久综合一区77777| 国产成人精品日本亚洲专区6| 午夜视频免费观看| 亚洲va成无码人在线观看| 91青青青国产在观免费影视| 亚洲人成人无码网www电影首页| 污污视频免费观看网站| 久久久久亚洲av无码尤物|