码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA小知识点-Finally和Return的执行关系

时间:2015-06-08 13:06:47      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题:

public static Map<String, String> getMapTry() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("KEY", "INIT");
         
        try {
            map.put("KEY", "TRY");
            return map;
        }
        catch (Exception e) {
            map.put("KEY", "CATCH");
            e.printStackTrace();
        }
        finally {
            map.put("KEY", "FINALLY");
        }
         
        System.out.println("---------end--------");
        return map;
    }
    
public static Map<String, String> getMapCatch() {
        Map<String, String> map = null;
         
        try {
            map.put("KEY", "TRY");
        }
        catch (Exception e) {
            map = new HashMap<>();
            map.put("KEY", "CATCH");
            e.printStackTrace();
            return map;
        }
        finally {
            map.put("KEY", "FINALLY");
        }
        System.out.println("---------end--------");
        return map;
}
    
    
public static int getInt() {
        Map<String, String> map = null;
        int ret =0; 
        try {
            map.put("KEY", "TRY");
            ret = 1;
        }
        catch (Exception e) {
            map = new HashMap<>();
            map.put("KEY", "CATCH");
            e.printStackTrace();
            return ret;
        }
        finally {
            map.put("KEY", "FINALLY");
            ret =3;
        }
        System.out.println("---------end--------");
        return ret;
    }
    
    public static void main(String[] args) {
        System.out.println("try:" + getMapTry().get("KEY").toString());
        System.out.println("catch:" + getMapCatch().get("KEY").toString());
        System.out.println("int:" + getInt());
        
}

 

执行结果:

try:FINALLY
java.lang.NullPointerException
  at com.wmshua.test.FinallyReturnRelation.getMapCatch(FinallyReturnRelation.java:43)
  at com.wmshua.test.FinallyReturnRelation.main(FinallyReturnRelation.java:14)
catch:FINALLY
java.lang.NullPointerException
  at com.wmshua.test.FinallyReturnRelation.getInt(FinallyReturnRelation.java:63)
  at com.wmshua.test.FinallyReturnRelation.main(FinallyReturnRelation.java:15)
int:0

结果分析:

引用类型发生了变化,基本数据类型没有修改。

 

从执行结果得出以下结论:

  1. finally 即使在try或者catch中存在 return 且执行的情况下也会执行。
  2. finally 对变量的修改发生在方法调用结束之前。
  3. return 语句是在 finally 之前执行的。
  4. return 的返回结果并不是返回原数据而是对原有数据的拷贝,基本数据类型拷贝基本类型值,引用类型拷贝引用而不拷贝引用内的值。
  5. finally 内语句能够影响引用类型但不会影响基本数据类型。

 

JAVA小知识点-Finally和Return的执行关系

标签:

原文地址:http://www.cnblogs.com/inbase/p/4560616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!