posts - 11, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          Java 異常處理

          Posted on 2005-10-13 14:15 -=Kinohl=- 閱讀(568) 評論(0)  編輯  收藏 所屬分類: 編程語言
          Java異常處理機制


          keywords:

          Exception,Method Inovation Stack,

          難度:初學(xué),易



          異常類的繼承
          Java異常是java程序運行時遇到非正常情況而創(chuàng)建的一種對象,她包裝了異常的信息。
          Java異常的頂級類就是java.lang.Throwable。其結(jié)構(gòu)如下:

          JavaExceptionClass
          其中

          Error ---- JVM的錯誤,也就是程序本身無法恢復(fù)的嚴(yán)重錯誤。

          Exception--被程序捕獲并處理的異常。



          JVM的方法調(diào)用堆棧
          大家對于Debug都很喜歡,因為每當(dāng)有異常出現(xiàn)的時候,她會告訴你哪里出了異常調(diào)用到底是什么。這又是如何實現(xiàn)的?

          在JVM中使用了Method Inovation Stack機制來跟蹤每一個線程中一系列的方法調(diào)用過程。并保存在Stack里邊。
          Stack的頂端也就是當(dāng)前正在處理的方法。在Debug的時候,JVM會暫停被debug的線程,克隆她的Stack,然后顯示出來供

          developer操作,這一點用Eclipse的人很有體驗吧。



          一旦異常發(fā)生,JVM首先從當(dāng)前的方法開始尋找處理的try/Catch,找不到,就回朔到stack的下一個,也就是parent調(diào)用

          方法。舉例如下:

          public void child(int a)throws UserException{
            
          if (a < 0
               
          throw new UserException();
          }


          父方法如下:

          public void parent(int a){
            
          try{
                a 
          = 1;
                method(a);
          //throw Exception
            }
          catch(UserException ue){
                System.out.println(
          "I get it from Child")!
                ue.printExceptionStack();
            }

          }


          就這樣,異常被抓住了。當(dāng)然,如果在child方法里邊就捕獲,parent就不用這么“累”了。

          其實最累的還是JVM,她要對異常捕獲進(jìn)行查找,如果一直都找不到,就把異常直接拋給用戶,那么在終端上就能看

          到了。如果是拋出異常的程序是主程,還沒有被捕獲,那就“死翹翹”了。要注意!



          異常處理對性能的影響

          從上邊的原理就能知道,不捕捉異常、捕捉異常的位置不合適、都會導(dǎo)致JVM性能降低。



          (PS:先記到這里,繼續(xù)上班。)










          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 思茅市| 泽普县| 金川县| 明光市| 汝州市| 石河子市| 合水县| 翁牛特旗| 恩平市| 兴和县| 洪湖市| 潮州市| 林芝县| 汉阴县| 重庆市| 台东县| 甘孜县| 永善县| 长沙市| 南通市| 海伦市| 合作市| 安化县| 苏尼特左旗| 阿鲁科尔沁旗| 洪洞县| 麻栗坡县| 醴陵市| 宁蒗| 宁国市| 祁连县| 拉萨市| 聊城市| 华阴市| 锦州市| 黄浦区| 岐山县| 苗栗市| 安国市| 铁岭市| 锡林郭勒盟|