java解惑中的—異常,簡(jiǎn)單程序,但容易錯(cuò)

           下面三個(gè)程序每一個(gè)都會(huì)打印些什么? 不要假設(shè)他們都可以編譯通過(guò):

          第一個(gè)程序:
          import java.io.IOException;

          public class Arcane1 {
              
          public static void main(String[] args) {
                  
          try{
                      System.out.println(
          "hello lsbwahaha");
                  }
          catch(IOException e){
                      System.out.println(
          "I've never seen println fail!");
                  }

              }

          }


          第二個(gè)程序:
          1public class Arcane2 {
          2    public static void main(String[] args) {
          3        try{
          4            //you have noting nice to say
          5        }
          catch(Exception e){
          6            System.out.println("this can't happen");
          7        }

          8    }

          9}


          第三個(gè)程序:

          interface Type1{
              
          void f() throws CloneNotSupportedException;
          }


          interface Type2{
              
          void f() throws InterruptedException;
          }


          interface Type3 extends Type2,Type1{}

          public class Arcane3 implements Type3 {
              
          public void f(){
                  System.out.println(
          "hello lsbwahaha");
              }

              
          public static void main(String[] args) {
                  Type3 t3 
          = new Arcane3();
                  t3.f();
              }

          }


          分析第一個(gè)程序:
                  看起來(lái)應(yīng)該會(huì)打印出hello lsbwahaha,這個(gè)程序不能編譯,因?yàn)閜ringln犯法沒(méi)有會(huì)拋出任何受檢查異常,
          而IOException 卻正是一個(gè)受檢查異常。
          語(yǔ)言規(guī)范中描述:如果一個(gè)catch子句要捕獲一個(gè)類型為E的受檢查異常,而其相對(duì)應(yīng)的try子句不能拋出E的某種子類型的異常,
          那么這就是一個(gè)編譯期錯(cuò)誤。


          分析第二個(gè)程序:
              基于第一個(gè)程序,那么第二個(gè)程序應(yīng)該不可以編譯,但是它卻可以。它之所以可以編譯,是因?yàn)樗ㄒ坏腸atch子句檢查了Exception
             捕獲Exception或Throwable的catch子句是合法的,不管于其相對(duì)應(yīng)的try子句的內(nèi)容為何。  這個(gè)程序什么都不會(huì)打印。


          分析第三個(gè)程序:
             看起來(lái)它也不能編譯。 如果它能編譯,那是為什么呢?
           結(jié)果居然能編譯通過(guò)。。。。  這個(gè)到底是為什么呢?、、、、、、、
               Type3 中 因?yàn)槊恳粋€(gè)接口都限制了方法f可以拋出的受檢查異常集合。一個(gè)方法可以拋出的受檢查異常集合是它所適用的所有類型聲明
          要拋出的受檢查異常交集,而不是并集。




          posted on 2009-04-07 20:51 胡鵬 閱讀(200) 評(píng)論(0)  編輯  收藏 所屬分類: java基礎(chǔ)

          導(dǎo)航

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 津南区| 富民县| 南溪县| 灵丘县| 德清县| 西峡县| 宜君县| 吴江市| 龙门县| 繁峙县| 法库县| 余干县| 封丘县| 达尔| 玉树县| 浮山县| 台中县| 台南市| 贺兰县| 汉川市| 宝坻区| 惠州市| 甘德县| 高邮市| 浑源县| 天台县| 连南| 宝应县| 横峰县| 金昌市| 绥棱县| 平潭县| 东乌| 娄烦县| 阳曲县| 封丘县| 黄石市| 张家川| 文安县| 溧水县| 靖江市|