異常try...catch...及其相關問題

錯誤(Error):表示恢復不是不可能可是很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。java

異常(Exception):表示一種設計或實現問題。也就是說,它表示程序運行正常,從不會發生的狀況。ide

錯誤-----沒有經過編譯,在編譯時出錯。spa

異常-----經過編譯,在運行中出錯。設計

1 try{
2      可能出現異常的代碼塊
3      return ***4 }catch(異常對象){
5      一旦try中出現了異常則執行
6      return ***7 }finally{
8      不管是否出現異常都會執行  
9 }
View Code

注意:catch塊中必須有和try塊中return相同類型的return。code

      在一個方法裏,return永遠是最後一步。對象

           異常最大類:Exception。blog

           全部用native修飾的,調用的都是底層系統的方法,沒有方法體。內存

java規範:不容許用異常作流程控制。字符串

finally代碼塊裏的內容何時被執行,在retutn錢仍是在return後?io

先來一段代碼:

 1 public class A{
 2      public static int add(int a,int b){
 3           try{
 4                int c=a+b;
 5            System.out.println("try");
 6            return c;
 7           }catch(Exception e){
 8                System.out.println("catch");
 9            return 0;
10       }finally{
11            System.out.println("finally");
12       }
13      }
14      public static void main(String[] args){
15           System.out.println(add(1,2));
16      }
17 }
18 結果:
19 try
20 finally
21 3
View Code

經過反彙編命令javap -c A,能夠獲得下圖:

能夠看出,finally中的代碼塊是在return中間執行的。

下面來講說正常狀況:

1~9:首先把a和b的值壓棧,放到操做數棧的棧頂,而後相加,並把結果給了c,接下來把字符串try放到棧頂並輸出

12~19:把c的值壓棧,放到棧頂,而後再把棧頂的值給了c,而後在把字符串finally放到棧頂並輸出

22~23:把c的值進行壓棧,並輸出結果

 

如有錯誤之處,歡迎指正。謝謝!

相關文章
相關標籤/搜索