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

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

          第一個(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è)程序:
                  看起來應(yīng)該會(huì)打印出hello lsbwahaha,這個(gè)程序不能編譯,因?yàn)閜ringln犯法沒有會(huì)拋出任何受檢查異常,
          而IOException 卻正是一個(gè)受檢查異常。
          語言規(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è)程序:
             看起來它也不能編譯。 如果它能編譯,那是為什么呢?
           結(jié)果居然能編譯通過。。。。  這個(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)論排行榜

          主站蜘蛛池模板: 海淀区| 原阳县| 安达市| 宁波市| 平塘县| 屏边| 东辽县| 江津市| 武鸣县| 京山县| 麻城市| 清新县| 芦溪县| 平武县| 天长市| 丰宁| 资溪县| 桐乡市| 牟定县| 灌云县| 拜城县| 浏阳市| 安平县| 汝阳县| 弥勒县| 大连市| 永泰县| 峨眉山市| 门头沟区| 肥东县| 丰城市| 开远市| 西吉县| 临漳县| 大厂| 贵南县| 上林县| 枣阳市| 蚌埠市| 英超| 苍溪县|