黑马程序员技术交流社区

标题: return 和finally的一个问题 [打印本页]

作者: 王亚飞    时间: 2013-5-8 21:01
标题: return 和finally的一个问题
本帖最后由 王亚飞 于 2013-5-9 14:14 编辑

证明return是在finally执行后才返回,自己写了一个表现不出来啊
  1. public class Demo {
  2. public static void main(String[] args) {
  3. System.out.println(method());
  4. }
  5. public static int method(){
  6. int x = 1;
  7. try {
  8. System.out.println("return"+x);
  9. return x;
  10. }

  11. finally{
  12. x = 2;
  13. System.out.println("finally"+x);
  14. }

  15. }
  16. }
复制代码

作者: Jacky_Chen1990    时间: 2013-5-8 21:09
先占沙发。。
作者: hou604720966    时间: 2013-5-8 21:15
本帖最后由 hou604720966 于 2013-5-8 21:19 编辑

怎么不对了,你的打印结果
return1      ---这是try中的打印
finally2      ---这是finally的打印
1              ---这是method()方法的打印      打印1是因为你return在try中,而你在finally中将x赋值为2是不会改变返回的值
是这个吧?
作者: 高新星    时间: 2013-5-8 21:19
好像是向return一个值,最后都要执行finally中的代码
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 System.out.println("return--"+method());
  4.         }

  5.         public static int method() {
  6.                 int x = 1;
  7.                 try {
  8.                         return x++;
  9.                 }

  10.                 finally {
  11.                         System.out.println("finally--" + x);
  12.                 }

  13.         }
  14. }
复制代码
运行结果:
finally--2
return--1

作者: 刘胜寒    时间: 2013-5-8 21:20
这个啊....
在十九期有人问过了。。。
你写的对啊。。。。
我勒个去。。。我被你搞糊涂了。。。
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!(不要嫌我烦,我感觉也挺烦躁的。这是我的责任啊)

作者: 潘贵    时间: 2013-5-8 21:20
定义两个double变量,用两个变量分别先记录它们执行的时刻,再相减,根据结果的正负来判断谁先执行
作者: hou604720966    时间: 2013-5-8 21:22
高新星 发表于 2013-5-8 21:19
好像是向return一个值,最后都要执行finally中的代码运行结果:
finally--2
return--1

你这样写他就更看不懂了,因为这个是关于x++或者++x的运用

其中x++是先用后加的
而 ++x是先算后用的
作者: 极限冰风    时间: 2013-5-8 21:26

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                Scanner input=new Scanner(System.in);
                try {
                        System.out.print("请输入除数:");
                        int a=input.nextInt();
                        System.out.print("请输入被除数:");
                        int b=input.nextInt();
                        System.out.println(String.format("%d/%d=%d",a,b,a/b));
                       
                } catch (InputMismatchException e) {
                        System.out.println("被除数和除数必须是整数");
                        return;
                }catch(ArithmeticException e){
                       
                        System.out.println("除数不能为零!");
                        return;
                }finally{
                        System.out.println("谢谢使用!");
                }
        }

}
这个程序你应该会比较清楚,你可以调试看看执行的顺序就知道了
作者: 高新星    时间: 2013-5-8 21:27
hou604720966 发表于 2013-5-8 21:22
你这样写他就更看不懂了,因为这个是关于x++或者++x的运用

其中x++是先用后加的

我的意思就是return一个x 的值,
然后执行finally时,是得到的x+1;
根据结果可以判断是在return 之后再执行finally的,否则,打印的值应该是一样的
作者: hou604720966    时间: 2013-5-8 21:29
高新星 发表于 2013-5-8 21:27
我的意思就是return一个x 的值,
然后执行finally时,是得到的x+1;
根据结果可以判断是在return 之后再执 ...

了解了解
作者: zms2100    时间: 2013-5-8 21:48
一个方法的返回值只能有一个,如果有多个,后面的就会将前面的数值覆盖掉。
LZ,如果要打印那个 x = 2;可以在finally 的打印语句下面添加个return x; 最后返回出现在控制台上的就会变成2了。(因为后面的覆盖了前面的)
如果想要验证这个过程,可以在接收那里创建一个数组,用来存储它们。(这一步有些难度,我忘记是在哪里看见了的,等我找到或想到再补充给LZ)
作者: 杨兴庭    时间: 2013-5-8 22:20
刘胜寒 发表于 2013-5-8 21:20
这个啊....
在十九期有人问过了。。。
你写的对啊。。。。

呵呵,版主不容易啊。。。辛苦辛苦,。。。支持工作。。。
作者: 刘胜寒    时间: 2013-5-9 12:05
哥们修改分类啊 。。。。。
作者: up.yfei    时间: 2013-5-9 12:56
哎呦我去,小伙,咱俩同名。。。
作者: 王亚飞    时间: 2013-5-9 14:13
up.yfei 发表于 2013-5-9 12:56
哎呦我去,小伙,咱俩同名。。。

这么有缘分
作者: 王亚飞    时间: 2013-5-9 14:15
刘胜寒 发表于 2013-5-8 21:20
这个啊....
在十九期有人问过了。。。
你写的对啊。。。。

不好意思,平时没什么时间上论坛,上了就改了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2