try、catch、finally容易忽略的點

try、catch、finally用法總結:spa

  一、無論有沒有異常,finally中的代碼都會執行code

  二、當try、catch中有return時,finally中的代碼依然會繼續執行orm

  三、finally是在return後面的表達式運算以後執行的,此時並無返回運算以後的值,而是把值保存起來,無論finally對該值作任何的改變,返回的值都不會改變,依然返回保存起來的值。也就是說方法的返回值是在finally運算以前就肯定了的。blog

  四、finally代碼中最好不要包含return,程序會提早退出,也就是說返回的值不是try或catch中的值io

 

執行順序:class

public static void main(String[] args) {
        System.out.println(test());
    }
   public static int test(){
       int i = 1;
       try{
           i++;
           System.out.println("try block, i = "+i);
       }catch(Exception e){
           i ++;
           System.out.println("catch block i = "+i);
       }finally{
           i = 10;
           System.out.println("finally block i = "+i);
       }
       return i;
   }

結果輸出以下:test

    try block, i = 2程序

    finally block i = 10方法

    10總結

  先執行try裏面代碼,再finally代碼,最後return。

 

 

當咱們把return放到try塊中和catch塊中,會怎麼樣呢?

public static void main(String[] args) {
        System.out.println(test());
    }
   public static int test(){
       int i = 1;
       try{
           i++;
           System.out.println("try block, i = "+i);
           return i;
       }catch(Exception e){
           i ++;
           System.out.println("catch block i = "+i);
           return i;
       }finally{
           i = 10;
           System.out.println("finally block i = "+i);
       }
   }

結果輸出以下:

  try block, i = 2
  finally block i = 10
  2

如咱們總結同樣:

   1、當try、catch中有return時,finally中的代碼依然會繼續執行

   二、finally是在return後面的表達式運算以後執行的,此時並無返回運算以後的值,而是把值保存起來,無論finally對該值作任何的改變,返回的值都不會改變,依然返回保存起來的值。也就是說方法的返回值是在finally運算以前就肯定了的。

另外,若是在finally中存在return,有黃色警告:finally block does not complete normally,意思是finally代碼塊不能正常完成。

相關文章
相關標籤/搜索