finally块是无论如何都会执行的,而且我觉得finally块最大的用处就是释放掉一些资源,所以说假如你在try块中返回,程序又不执行finally块那你说finally块又有什么用呢?那干脆就不要来个finally块好了。

解决方案 »

  1.   

    当然执行了,要不然还要final干什么啊。
      

  2.   

    finally块是无论如何都会执行的
      

  3.   

    还有更复杂的情况呢
    1
    try{
      return 1;
    }finally{
      return 2;
    }2 
    try{
      int i=1;
      return i;
    }finally{
      i=2;
    }3
    for(...){
      try{
        return 1;
      }finally{
        break;
      }
    }
    return 2;
      

  4.   

    finally在try-catch-finally中是可以有也可以无的,最重要的是它能够保证一个函数无论出错与否,都有一些函数能够得到执行,包括释放资源、返回值等等。通常用来释放一些大的资源。
    return 只是在流程方面结束函数功能,而不是在构架方面。
      

  5.   

    像0xCafeBabe(咖啡宝贝~找不到工作郁闷死) 说的
    1
    try{
      return 1;
    }finally{
      return 2;
    }
    我测试了,实际返回为“return 2”,那"return 1"等于是没有了,大家怎么说?
      

  6.   

    OnlyLikeJava(甜咖啡) and cxb1004(天地笑) :
    我的想法是:return是打破流程,finally一般都作为释放资源的我也知道,但作为一个方法或函数,它应该只有一个出口,既然在Try中有Return也执行了,那么应该就打破流程返回了,但还有Finally要执行,这就是说在打破流程以后方法或函数里面的东东,这就有点让我想不通
      

  7.   

    你可以把整个程序想象成一个主进程,其中有多个线程,
    当执行完函数调用后他进行返回,也就是final的前面,然后进行最后的处理,
    最后回收,程序结束
    大体形状是这样:
    |fun()调用
    || |  |  /
    |/
    |返回
    |最后执行final
      

  8.   

    在try块的return执行之前会先执行finally中的代码
      

  9.   

    那Try和Finally中的两个Return有什么关系呢?
    try{
      return Class;
    }finally{
      return Class;
    }
      

  10.   

    如果在finally块中有一条return语句返回一个值,那么这个值将被返回,前面任何的return语句返回的值都无用。
      

  11.   

    原因在于finally中的代码会在try中的return之前被执行,如果finally有return就直接返回了,执行不到try块中的return。
      

  12.   

    to: zjpangxie(又胡了)
    如果你说的成立--“finally中的代码会在try中的return之前被执行”,那我就能想通了,我一直都没有找到这方面的资料。
    那位老兄能提供这方面的资料,我表示万分感谢!!!如果不方便的话也可发到我邮箱[email protected]
      

  13.   

    这方面的资料指什么?java涉及的东西太多,没有资料是可以面面俱到的,只能靠平时的积累。
      

  14.   

    我是指Try和Finally之间的关系的资料。不过你说得也对
      

  15.   

    我觉得大家还是不要在这里胡乱的猜想了,
    要想真正理解return和finally的含义,还是
    去看看jvm的工作机制以及他们所对应的字节码
    的含义,了解了底层的机制,很多问题就迎刃而接了。
      

  16.   

    推荐一本书《inside java virtual machine》,中文版叫做《深入Java虚拟机》
      

  17.   

    finally块是无论如何都会执行的
      

  18.   

    try{
      //只要你的代碼執行到這裡就一定要執行finally代碼塊.
    }catch(){
    }..
    finally{
    }
      

  19.   

    我是说Try里的Return和Finally的关系