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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 戎石锁问枫 于 2012-8-4 22:22 编辑

1、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
2、AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人亮相,赞一个!

查看全部评分

7 个回复

倒序浏览
1, finally{}里的code先执行,然后执行try{}里有一个return语句
2, 匿名内部类可以继承类和接口的
回复 使用道具 举报
本帖最后由 王志明 于 2012-8-3 21:04 编辑

1.finally里面的code会执行的,在return之前执行,但是如果在执行finally之前执行System.exit(0)的话,finally就不会被执行到了
2. 匿名内部类本身就是继承了其它类或实现了其它接口,要是在这基础再继承或实现,好像语法上不能这么写吧
回复 使用道具 举报
谢谢 问题已解决
回复 使用道具 举报
非真实姓名注册论坛用户ID提问,解决问题,不提供任何技术分加分。(非真实姓名发帖,版主和管理人员有权直接关闭贴)
申请论坛改名地址:http://bbs.itheima.com/thread-19719-1-1.html
如果姓名已经有人注册
例如:王鹏 这个ID被注册了,那么你可以改成“黑马-王鹏”“黑马粉-王鹏”“黑马_王鹏”“黑马王鹏”都是可以的!


回复 使用道具 举报
本帖最后由 李知伦 于 2012-8-4 02:29 编辑

1、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会,之后

我觉得如果你把题目中的return理解返回值,答案就是"之前";如果理解成代码,语句,就是之后
不管怎样这里的finally肯定会被执行
  1. public class Test {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                
  7.                 // TODO Auto-generated method stub
  8.                 System.out.println("返回值:"+new Test().tt());;                                
  9.         }


  10.         static int tt() {
  11.                 int x = 1;
  12.                 try {
  13.                         return Return();
  14.                 }
  15.                 finally {
  16.                         ++x;
  17.                         System.out.println("finally块执行,x="+x);               
  18.                         //如果try与finally中都有return语句,返回值以finally的为准,返回值为2
  19.                         //return x;
  20.                                 
  21.                 }
  22.         }
  23.         static int Return(){
  24.                 System.out.println("return执行");
  25.                 return 1;
  26.         }
  27. }
复制代码
运行结果:
return执行
finally块执行,x=2
返回值:1


回复 使用道具 举报
在try-finally语句中,只要不是进程被强行杀掉,遇到System.exit(0)语句,finally中的内容一定是要执行的。如果try中有return语句,它和finally哪个先执行的问题,下面用代码说明
  1. class Test2
  2. {
  3.        public int value = 1;
  4. }

  5. public class Test1
  6. {
  7.        public static void main(String[] args)
  8.        {
  9.               System.out.println(Func2().value);
  10.        }

  11.        public static Test2 Func2()
  12.        {
  13.               Test2 t = new Test2();

  14.               try
  15.               {
  16.                      return t;
  17.               }
  18.               finally
  19.               {
  20.                      t.value++;
  21.               }
  22.        }
  23. }
复制代码
运行结果为2,可以看出JVM是先运行了finally中的代码,然后在运行try中的return
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马