经典的java中return和finally问题!

标签:

杂谈

分类: java学习
前一段时间 参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行后发现了错误,我修改后放在了我的blog 上面,希望和大家分享。
经典的java中return和finally问题!
 

代码如下:

public      class      Test
{
public static void main(String[] args)
{
System.out.print(tt());
}
public static int tt()
{
int b = 23;
try
{
System.out.println("yes");
return b+=88;
}
catch(Exception e)
{
System.out.println("error : " + e);
}
finally
{
if(b>25)
{
System.out.println("b>25 : "+b);
}
System.out.println("finally");
}
return b;
}
}

代码说明:

主要是用来测试return和finally语句到底哪个先执行.在try语句中,返回了b=111; 在finally语句中判断是否大于25,如果大的话就输出大..程序的结果是

yes

b>25        :        111

finally

111

也就是说明finally语句在return语句执行完了以后才执行的.

OK,那么问题来了,如果我把finally语句改成这样呢:

 finally
{
if(b>25)
{
System.out.println("b>25 : "+b);
}
System.out.println("finally"); return 100;
}

也就是在finally中加入return 语句,返回不同的值. 那么,返回值到底是原来的b值(88),还是新的这个返回值呢? 废话不多,看结果:

yes

b>25        :        111

finally

100

这样又说明了一个问题,finally语句块里面的return把原来的return给覆盖了!!变成了新的返回值了.

OK,继续闷骚:我把代码改成这样:

 try
{
System.out.println("yes");
return b;
}
catch(Exception e)
{
System.out.println("error : " + e);
}
finally
{
if(b>25)
{
System.out.println("b>25 : "+b);
}
System.out.println("finally");
b=100;
}

也就是把 try中的返回语句改成返回b值,然后在finally中改变b的值. 那么返回结果到底是原来的b值呢, 还是更改过的b值呢?结果如下:

yes

finally

23

说明了一个问题,如果finally语句中没有返回语句覆盖的话,那么原来的返回值就不会变,不管你是不是改变了要返回的那个变量.

最后还是来说说一点点想法,这个机制是不是这样的呢?碰到try语句中的return,那么先把return的值放在某个池中(怎么我也说起池来了,明明根本还不懂的)?       然后执行finally里面的代码块,如果有返回值覆盖语句,就改变先前放在池中的那个值,如果没有,就把那个池中的东西取出来返回出去

经典的java中return和finally问题!的更多相关文章

  1. Java中return的语句

    1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...

  2. Java中 return 和finally

    1. 最简单的情形 public void main(){ String s = test(); System.out.println("s=[" + s + "]&qu ...

  3. java中return在Try-Catch中的执行顺序

    我们知道return会结束此方法并返回指定值.以及在Try-catch-finally中无论try代码块中有没有异常finally中的代码时都会被执行的.但是如果return包含在try-catch- ...

  4. java中return与finally的执行顺序

    可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...

  5. Java中Return和Finally运行顺序的实现

    以下这段代码的运行结果是如何的呢? [java] view plaincopyprint? publc int test(){ int x; try{ ; return x; }catch(Excep ...

  6. Java中return返回结果的优先级

    在Java开发时,异常处理是非常普遍的.先看这样一道关于异常处理的代码 public static int getNumer() { int a = 1; try { return a; } catc ...

  7. JAVA中return的用法

    public class TestReturn { public static void main(String args[]) { TestReturn t = new TestReturn(); ...

  8. Java中Return和Finally执行顺序的实现

    下面这段代码的执行结果是怎样的呢? publc int test(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return ...

  9. java 中 return 的两种常见的用法

    一:return语句总是用在方法中,有两个作用: 一个是返回方法指定类型的值(这个值总是确定的), 一个是结束方法的执行(仅仅一个return语句). 二:实例1 -- 返回一个String priv ...

随机推荐

  1. 1045. Favorite Color Stripe (30) -LCS允许元素重复

    题目如下: Eva is trying to make her own color stripe out of a given one. She would like to keep only her ...

  2. String类用法总结

    String类在编程中出现的频率是非常高的,熟练掌握是很有必要的 一.常用方法总结: 获取方法 1.1:字符串中包含的字符数,也就是字符串的长度. int length():获取长度 1.2:根据位置 ...

  3. MyEclipse9安装Checkstyle5.5插件(图解)

    ①首先下载Eclipse Checkstyle Plug-in     官方首页:http://sourceforge.net/projects/eclipse-cs/files/     最新版为: ...

  4. Dynamics CRM 导入用户数据错误 could not retrieve salesperson role

    在CRM中通过导入数据的方式创建用户时报下图中的错误,"could not retrieve saleperson role".原因是系统中的自带的salesperson安全角色被 ...

  5. pig函数以及关键字 的一些实例应用的总结(来自pig笔记)

    http://wenku.baidu.com/link?url=yb7KnpSj9nHxWk_MsEVUezvB24evRf9wR87FX0dTT77pGXNXi6k3o_kTmAkBrpIHTqo6 ...

  6. Leetcode_102_Binary Tree Level Order Traversal

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41929059 Given a binary tree, r ...

  7. Leetcode_21_Merge Two Sorted Lists

    ->4->4,return 1->2->3->4->5->6. 思路: (1)题意为将两个有序链表合成一个有序链表. (2)首先,分别对链表头结点判空,如果都 ...

  8. Android启动过程分析

    Android系统启动过程 首先看一张Android框架结构图 Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动的过程如下图所示:(图片来自网上, ...

  9. Variant does not reference an auomation object

    今天两个用户突然报错. 应用场景:审核或撤审核 字面意思:变量无法映射到对象,应该是调用对象的时候找不到.会不会是杀毒软件删除掉了. 两个用户都用了瑞星杀毒,哥不是黑,确实.应该是审核元被删掉 了. ...

  10. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十九):增加排行榜功能2

    接下来回到Xcode中,首先在PopupLayer.m中添加justClose方法: -(void)justClose{ [self.gameScene removePopup]; } 然后在Game ...