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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @小白@ 中级黑马   /  2013-7-3 13:19  /  1563 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个类证明return是在finally执行后才返回的,
//且在finally无法改变返回值。
package com.itheima;

class test06 {
        public static int demo() {
                int a = 2;
                try {
                        System.out.println("try的 a:" + a);

                        return a;// 需要被检测的代码块
                }
                       
               

                finally // 一定会执行的语句
                {
                        a = 9;
                        System.out.println("finally的 a:" + a);
                }
                return a;

        }

        public static void main(String[] args) {
                System.out.println("demo:" + demo());// 调用demo,如果打印结果为1证明
                                                                                                // finally不能改变try里面的返回值
        }
}



运行没有结果,这是为啥

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
我把代码改了一下,你看看吧
  1. <p>package mypakage;</p><p>//写一个类证明return是在finally执行后才返回的,
  2. //且在finally无法改变返回值。
  3. class Test06 {
  4.        public static int demo() {
  5.                int a = 2;
  6.                try {
  7.                        System.out.println("try的 a:" + a);</p><p>                       //return a;// 需要被检测的代码块
  8.               }
  9.                        
  10.                </p><p>              finally // 一定会执行的语句
  11.               {
  12.                        a = 9;
  13.                        System.out.println("finally的 a:" + a);
  14.                        
  15.                }
  16.               return a;
  17.        }</p><p>       public static void main(String[] args) {
  18.                System.out.println("demo:" + demo());// 调用demo,如果打印结果为1证明
  19.                                                     // finally不能改变try里面的返回值
  20.       }
  21. }</p><p>
  22. </p><p> </p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 xuluheng718 于 2013-7-3 13:46 编辑

你这完全就不能编译通过,愿意如下:
class test06 {
        public static int demo() {
                int a = 2;
                try {
                        System.out.println("try的 a:" + a);

                        return a;// 需要被检测的代码块
                }
                        
               

                finally // 一定会执行的语句
                {
                        a = 9;
                        System.out.println("finally的 a:" + a);
                }
                return a; -----------→这句完全就不能被执行,因为try代码块中已经有return了,①没异常则执行完finaly代码块后被try代码块中return了,②假如有异常则finaly代码块执行完毕后这句根本就不会被执行程序就停止了,把这句删了就可以执行了
        }

        public static void main(String[] args) {
                System.out.println("demo:" + demo());// 调用demo,如果打印结果为1证明
                                                                                                // finally不能改变try里面的返回值
        }
}


评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报
我把原因注释到代码里了,你看下
  1. class test06 {
  2.         public static int demo() {
  3.                 int a = 2;
  4.                 try {
  5.                         System.out.println("try的 a:" + a);

  6.                         return a;// 需要被检测的代码块;这条语句的执行在finally{}语句块的后边
  7.                 }
  8.                 finally // 一定会执行的语句
  9.                 {
  10.                         a = 9;
  11.                         System.out.println("finally的 a:" + a);
  12.                         //return a; //如果这里执行了return语句,程序就结束了,不会再执行try{}块中的return语句
  13.                                         //要想得到你要的结果只能将这个return语句注释掉,才能执行到try{}块里边的return语句
  14.                 }

  15.         }

  16.         public static void main(String[] args) {
  17.                 System.out.println("demo:" + demo());// 调用demo,如果打印结果为1证明
  18.                                                                                                 // finally不能改变try里面的返回值
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报
程序从上往下执行,有两个return所以编译出错。把finally语句块后面那个return a;去掉就会有结果。try会执行,finally也会被执行,由于a是基本数据类型不会改变他的值最后a还是2.
回复 使用道具 举报
xiexie ,我明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马