A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亚飞 中级黑马   /  2013-5-8 21:01  /  2152 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王亚飞 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

15 个回复

倒序浏览
先占沙发。。
回复 使用道具 举报
本帖最后由 hou604720966 于 2013-5-8 21:19 编辑

怎么不对了,你的打印结果
return1      ---这是try中的打印
finally2      ---这是finally的打印
1              ---这是method()方法的打印      打印1是因为你return在try中,而你在finally中将x赋值为2是不会改变返回的值
是这个吧?
回复 使用道具 举报
好像是向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

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
这个啊....
在十九期有人问过了。。。
你写的对啊。。。。
我勒个去。。。我被你搞糊涂了。。。
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!(不要嫌我烦,我感觉也挺烦躁的。这是我的责任啊)
回复 使用道具 举报
潘贵 来自手机 中级黑马 2013-5-8 21:20:57
地板
定义两个double变量,用两个变量分别先记录它们执行的时刻,再相减,根据结果的正负来判断谁先执行
回复 使用道具 举报
高新星 发表于 2013-5-8 21:19
好像是向return一个值,最后都要执行finally中的代码运行结果:
finally--2
return--1

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

其中x++是先用后加的
而 ++x是先算后用的
回复 使用道具 举报

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("谢谢使用!");
                }
        }

}
这个程序你应该会比较清楚,你可以调试看看执行的顺序就知道了

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
hou604720966 发表于 2013-5-8 21:22
你这样写他就更看不懂了,因为这个是关于x++或者++x的运用

其中x++是先用后加的

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

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

呵呵,版主不容易啊。。。辛苦辛苦,。。。支持工作。。。
回复 使用道具 举报
哥们修改分类啊 。。。。。
回复 使用道具 举报
哎呦我去,小伙,咱俩同名。。。
回复 使用道具 举报
up.yfei 发表于 2013-5-9 12:56
哎呦我去,小伙,咱俩同名。。。

这么有缘分
回复 使用道具 举报
刘胜寒 发表于 2013-5-8 21:20
这个啊....
在十九期有人问过了。。。
你写的对啊。。。。

不好意思,平时没什么时间上论坛,上了就改了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马