public void init() {
    

解决方案 »

  1.   

    public int init() {
        int i = 0;
        try {
            i = 3;
            return i;
        }catch(Exception e) {
            i = 2;
            return i;
        }finally {
            i = 1;
        }
    }
      

  2.   

    public int init() {
      int i = 0;
      try {
      i = 3;
      return i;
      }catch(Exception e) {
      i = 2;
      return i;
      }finally {
      i = 1;
      return i;
      }
    }
      

  3.   

    难道第一个返回值是 3 ,第二个返回值是 1 ??那第二个方法里面的第一个return不就没什么作用了??求解释!
      

  4.   

    嗯你的答案正确
    正常是try里的先走return 后面的运算,然后在走finlly
    我就能理解到这里了。
    我昨天才看的这个,还看到了 try 的开源
    没太大必要研究那么底层吧
      

  5.   

    finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
      

  6.   

    正好这2天在研究这个try{}catch{}finally{}呢
      

  7.   

    呵呵,详细解释一下,注意一段话:The finally block always executes when the try block exits.
    即当try块退出时,此时finally才会执行。而楼主的程序,try块什么时候退出呢?是在return语句时退出时。众所周知,return时,返回的是i的值,而不是i本身。此时,i 的值为3。但是赋值呢?是对i本身进行操作,所以finally中赋值改变的是i本身,并不影响return中对i的值的返回。有兴趣,也可以研究一下如下代码:public int init() {
      int i = 0;
      try {
      i = 3;
      }catch(Exception e) {
      i = 2;
      return i;
      }finally {
      i = 1;
      }
     return i;
    }
      

  8.   


    //对BB对象进行操作时。
      public static BB getBB() {
        BB bb = new BB();
        try {
          bb.str += "try...";
          return bb;
        }
        catch (Exception e) {
          bb.str += "catch...";
          return bb;
        }
        finally {
          bb.str += "finally...";
          //return bb;//如果是对象,这里的引用效果就导致finally里面用不用return都一样
        }
      }看见这个问题试了试,顺便回帖领取每日10分可用分
      

  9.   

    程序走到try{}块中的return后,就立马跳到finally{}中去执行!
      

  10.   

    class Obj{
    public int i;
    public Obj(){
    i = 1;
    }
    } public static Obj init(){
    Obj o = new Obj();
    try{
    o.i = 3;
    return o;
    }finally{
    o.i = 1;
    }
    } public static void main(String[] args) {
    System.out.println(init().i);
    }这样呢?
      

  11.   

    先给大家说个知识点,大家在考虑下。
    在try{}catch(){}finally中只要语句进了这个体中,就一定会执行finally部分,不管你有没有return之前,当try中出现return后,他会执行finally中的内容在return。