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

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

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

    MDA之路

    MDA,UML,XML,Eclipse及Java相關(guān)的Blog
    posts - 53, comments - 494, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Java語言的異常類使用討論

    Posted on 2005-03-02 15:40 wxb_nudt 閱讀(1320) 評論(1)  編輯  收藏 所屬分類: 技術(shù)雜談

        Java異常的語法應(yīng)該是很簡單的,一個try,catch,finally,一個throws,throw,兩分鐘就可學(xué)完了。我相信許多人和我一樣,對于異常是這樣處理的:
    1.寫程序時就等編譯器檢查,一旦通不過就加try,catch;
    2.自己拋異常常常忘了在方法聲明時加throws,而且又不明白為什么有的異常需要throws,而有的又不需要;
    3.從來不寫自己的異常類;
    4.catch到異常不知道怎么辦,通通加一行printStackTrace拉倒;
    如果屬于以上這幾種情況的,我覺得有必要和我一起討論一下Java的異常使用方法。

        查閱資料可以得知,Java最主要的異常類包括4種:Throwable、Error、Exception和RuntimeException;其中Throwable是所有異常類的父類,它繼承Object類并實現(xiàn)Serializable接口;Error和Exception都是Throwable的子類;而RuntimeException是Exception的子類。Exception的子類非常多,但是RuntimeException是一個特殊的子類,需要單獨討論。
        一般當(dāng)程序員在某個方法中拋出一個Exception異常(或者其子類)時,需在方法頭部聲明此方法拋出了一個異常,就是用throws關(guān)鍵字來聲明;但是如果在方法中拋出一個RuntimeException或者一個Error時,則不需要聲明此方法拋出了異常,這是為什么呢?
        語法上的約束必然有其背后的道理;如果不去弄明白這些道理而是一味的依賴編輯器來幫忙,則事倍功半。事實上,Java語言的這種語法含義是:Java編譯器要求Java程序必須捕獲或聲明所有非運(yùn)行時的異常,也就是說,Exception異常是需查異常,必須由程序員對它嚴(yán)格的負(fù)責(zé),如果在方法中拋出,必須聲明,如果拋出的異常沒有被catch,則會出現(xiàn)語法錯誤,編譯都不能通過。這是強(qiáng)制性的讓程序員遵守Java的異常規(guī)則。這樣規(guī)定的原因是當(dāng)Exception異常出現(xiàn)時,運(yùn)行的程序還有補(bǔ)救的余地,通過異常處理代碼,可以讓程序恢復(fù)運(yùn)行,如果不捕捉這種異常,則白白浪費了補(bǔ)救程序的機(jī)會。而且,這種異常應(yīng)讓程序員可見,所以必須在方法頭部聲明此方法拋出了某種Exception異常。
        那么,Error和RuntimeException都是不需查異常,在方法中拋出這兩種異常都不需要聲明,在程序中不catch它們也不會造成語法錯誤。我的理解是,當(dāng)出現(xiàn)這樣的異常時,運(yùn)行的程序已經(jīng)沒有補(bǔ)救的余地了,于是直接拋出異常讓程序結(jié)束是比較合理的安排。如果在程序運(yùn)行時出現(xiàn)了Error或者RuntimeException,那么程序員也無能為力,所以它們可以對程序員透明,也不需要特意聲明讓程序員來處理它們。
        現(xiàn)在我們知道,try和catch一般對Exception及其子類使用,throws也是。而對于Error和RuntimeException則不需要throws,不過還是可以catch的,但是catch到它們一般也就是釋放資源,退出程序而已。
        對于catch到的異常的處理,最經(jīng)常犯的錯誤就是丟失異常,catch到舊的異常拋出新的異常,等到程序出錯時就找不到舊異常的信息了。其實JDK1.4已經(jīng)提供了這個問題的解決方案,就是用Exception的構(gòu)造函數(shù)形成異常鏈,用舊異常作為參數(shù)構(gòu)造新異常,這樣就可以在出錯時一步步跟蹤到所有出現(xiàn)過的異常了,這兩個構(gòu)造函數(shù)就是:
        public Exception(String message, Throwable cause) {
        super(message, cause);
        }
        public Exception(Throwable cause) {
            super(cause);
        }
        就想到這么多,以后有了新體會再續(xù)。


    評論

    # re: Java語言的異常類使用討論  回復(fù)  更多評論   

    2006-10-18 09:25 by jj
    請問:
    如何設(shè)計一個復(fù)數(shù)類,并在其中的沒個成員方法中檢測可能出現(xiàn)的各種異常?
    謝謝解答!
    主站蜘蛛池模板: 亚洲阿v天堂在线| 歪歪漫画在线观看官网免费阅读| 一级免费黄色毛片| 国产亚洲视频在线观看| 亚洲人成网亚洲欧洲无码| 亚洲卡一卡二卡乱码新区| 亚洲av产在线精品亚洲第一站| 亚洲熟妇色自偷自拍另类| 亚洲冬月枫中文字幕在线看| 亚洲精品美女久久久久| 亚洲男人电影天堂| 中文字幕亚洲男人的天堂网络| 亚洲人成伊人成综合网久久| 亚洲日韩精品无码专区加勒比☆| 亚洲熟女综合一区二区三区| 亚洲国产成人久久精品大牛影视| 色综合久久精品亚洲国产| 国产成人+综合亚洲+天堂| 一级a性色生活片久久无少妇一级婬片免费放| 99亚洲男女激情在线观看| 鲁啊鲁在线视频免费播放| 国产VA免费精品高清在线| 精品在线免费观看| 24小时免费看片| 在线观看人成网站深夜免费| 国产免费变态视频网址网站| 大胆亚洲人体视频| 亚洲第一极品精品无码久久| 亚洲黄色在线观看| 亚洲欧洲无卡二区视頻| 国产天堂亚洲国产碰碰| 国产无遮挡又黄又爽免费网站| 香蕉免费一区二区三区| 免费无码A片一区二三区| 亚洲精品国产va在线观看蜜芽| 亚洲精品无码永久在线观看你懂的 | 亚洲av无码成人精品区一本二本| 美国免费高清一级毛片| 青柠影视在线观看免费| 曰批视频免费30分钟成人| 国产精品va无码免费麻豆|