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

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

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

    Kimi's NutShell

    我荒廢的今日,正是昨日殞身之人祈求的明日

    BlogJava 新隨筆 管理
      141 Posts :: 0 Stories :: 75 Comments :: 0 Trackbacks
    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)的
    posted on 2006-07-14 14:28 Kimi 閱讀(142) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java
    主站蜘蛛池模板: 亚洲国产精品毛片av不卡在线 | 日韩一级免费视频| 蜜臀98精品国产免费观看| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲国产成人精品久久| 亚洲嫩模在线观看| 亚洲国产老鸭窝一区二区三区| 亚洲熟妇无码乱子AV电影| 亚洲线精品一区二区三区| 久久亚洲国产精品123区| 亚洲午夜日韩高清一区| 国产综合精品久久亚洲| 亚洲欧洲精品无码AV| 丁香五月亚洲综合深深爱| 亚洲性猛交XXXX| 亚洲国产精品无码成人片久久| 亚洲国产精品va在线播放| 久久久久久久久亚洲| 无码久久精品国产亚洲Av影片| 久久久久久久久亚洲| 亚洲国产精品成人综合久久久| 亚洲人成人77777网站不卡 | 亚洲情侣偷拍精品| 亚洲香蕉成人AV网站在线观看| 精品亚洲综合在线第一区| 久久亚洲精品中文字幕| 亚洲伊人色一综合网| 亚洲AV女人18毛片水真多| 日韩在线观看免费完整版视频| 国产免费MV大全视频网站| 久久精品私人影院免费看| 97在线线免费观看视频在线观看| 夫妻免费无码V看片| 免费A级毛片无码A∨男男| 亚洲中文字幕无码久久2017| 亚洲视频精品在线| 亚洲夂夂婷婷色拍WW47| 男女啪啪免费体验区| 免费精品一区二区三区第35| 亚洲性线免费观看视频成熟| 国产免费直播在线观看视频|