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

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

          第一個程序:
          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!");
                  }

              }

          }


          第二個程序:
          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}


          第三個程序:

          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();
              }

          }


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


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


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




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

          導(dǎo)航

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

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安岳县| 延长县| 旌德县| 汉中市| 长葛市| 比如县| 祁东县| 公安县| 会宁县| 磐石市| 封开县| 梧州市| 汶上县| 奉化市| 丹阳市| 闵行区| 沁阳市| 勃利县| 庆阳市| 张家港市| 盐山县| 衡阳市| 浦城县| 石门县| 望都县| 衡阳县| 楚雄市| 历史| 芜湖市| 万宁市| 忻州市| 千阳县| 康平县| 淳安县| 进贤县| 江华| 怀安县| 洛扎县| 拉孜县| 开封县| 南安市|