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,

          難度:初學,易



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

          JavaExceptionClass
          其中

          Error ---- JVM的錯誤,也就是程序本身無法恢復的嚴重錯誤。

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



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

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

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



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

          方法。舉例如下:

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

          }


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

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

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



          異常處理對性能的影響

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



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










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


          網站導航:
           
          主站蜘蛛池模板: 阳谷县| 社会| 青海省| 泗阳县| 从化市| 铅山县| 呼图壁县| 宝丰县| 化州市| 锦屏县| 孝义市| 锡林浩特市| 东乌珠穆沁旗| 上思县| 安塞县| 遵义市| 江北区| 广平县| 泰兴市| 秦皇岛市| 天镇县| 海兴县| 华坪县| 乐陵市| 铜山县| 凌海市| 宝坻区| 陆川县| 高平市| 竹山县| 昂仁县| 株洲县| 新宁县| 梁河县| 滕州市| 工布江达县| 无为县| 崇左市| 库尔勒市| 天镇县| 乐平市|