歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java中try-catch-finally中的return語句

在try-catch-finally語句中使用return語句遇到了一些疑問

代碼一:

static int intc(){
        int x =0;
        try{
            x=1;
            return x;
        }finally {
            x = 3; 
        }
    }

代碼二:在上面那段代碼的finally語句中加入了return語句

static int intc(){
        int x =0;
        try{
            x=1;
            return x;
        }finally {
            x = 3;
            return x;
        }
    }

代碼三:

static int intc(){
        int x =0;
        try{
            x=1;
            return x;
        }finally {
            x = 3;
            return 0;
        }
    }

 

那麼這三個方法的執行結果是多少呢?


代碼一:返回1;
代碼二:返回3;
代碼三:返回0;

其中的原理是怎麼回事呢?

  原因是java虛擬機在執行具有返回值的方法時,會在本地變量列表中創建一塊區域來存儲方法的返回值,在執行返回語句時便會從這個區域中讀取值進行返回。

  代碼一中在try中將1賦值給變量x,然後將變量x的值復制到存儲返回值的區域,最後返回值區域存儲的就是1,執行返回語句時便返回一。

  而在代碼二中,同樣將1賦值給變量x,然後將x的值復制到存儲返回值的區域,此時返回值的區域的值為1,然後跳轉到finally語句中,此時將3賦值給局部變量x,然後在將x的      值復制到存儲返回值的區域,最後執行返回語句,讀取到的返回區域中的值就是3.

  代碼三中,try中執行的語句是一樣的,跳轉到了finally語句中後,將3賦值給局部變量,然後將0賦值到存儲返回值的區域,最後執行返回語句,讀取到的返回區域中的值就是      0,所以就返回0。

Copyright © Linux教程網 All Rights Reserved