public   class Sz {
      public int Test(){
     int x = 1;
     try{
     return x;
    
     }finally{
     ++x;
     }
      public static void main(String[] args) { System.out.println(new Sz().Test()); }
         }
}

解决方案 »

  1.   

    可是不是说fianlly 中的code一定会执行! 且会在return 前执行么?
      

  2.   

    public   class Sz  {
    public static void main(String[] args) {
    System.out.println(new Sz().Test());
    }
        public int Test(){
         int x = 1;
         try{
         return x;
        
         }finally{
         //++x;
         System.out .println("=======================");
         }
        }
    }
    结果是这样... 又怎么解释?
    =======================
    1
      

  3.   

    finally是一定会执行的,但是你的那个++x,它是先把值加1,也就是说(++x)的值是2,而x的值是1没变。你可以区分下x++和++x,x++是先使x的值加1在使用x,而++x是先用后加
      

  4.   

    public   class Sz extends son {
    public static void main(String[] args) {
    System.out.println(new Sz().Test());
    }
        public int Test(){
         int x = 1;                         //返回的是这个x
         try{
         return x;
        
         }finally{
         x+=3;
         System.out .println(x);
         }
        }
    }结果是下面===   我知道3楼你的意思  我觉得还是一楼说的对!
    4
    1
      

  5.   

    在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。 在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去(我们假定为tmp),执行完finally之后,在取出tmp返回结果, 因此,即使finally中对变量x进行了改变,但是不会影响返回结果。 
    但如果finally中也有return的话,则返回的就是finally中的return 返回的值。结论:当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,try中return的值会被临时保存且在执行finally后被返回该临时保存的值
      

  6.   

    类似于javascript中的闭包,程序到return时要返回,此时x=1,函数输出结果也是1,但finnaly要执行,程序最后的结果是x=2