public class A {
 public static int test(){
   int i=9;
   try{
    return i;
   }finally{
    i=10;
   }
 }
 public static StringBuffer test1(){
   StringBuffer  i=new StringBuffer(9);
   try{
    return i;
   }finally{
    i.append(10);
    i=null;
   } }
 public static void main(){
   System.out.println(test());
  System.out.println(test1()); }
}这个结果是多少?可能你知道原因,也可能你会猜对,不过大家知道原因不?hoho,其实我以前也不知道,最近才看到的,共享出来大家娱乐一下这里有具体讲解:
http://blog.csdn.net/lovingprince/archive/2007/05/16/1612206.aspx

解决方案 »

  1.   

    java.lang.NoClassDefFoundError: Test
    Exception in thread "main" !!
    他说我有错误%%%%555555
      

  2.   

    Exception in thread "main" java.lang.NoSuchMethodError: main
      

  3.   

    嗯神奇
    不过看了原理,应该这样更清晰
    public class Abc {  public static int test(){
       int i=9;
       try{
        return i;
       }finally{
        i=10;
       }
     }
     public static StringBuffer test1(){
       StringBuffer  i=new StringBuffer("9");
       try{
        return i;
       }finally{
        i.append("10");
        i=null;
       }  }
     public static void main(String[] arg){
     System.out.println(test());
      System.out.println(test1());  }}
      

  4.   

    public class InnerBox {

    public static int getI(){
    int i;
    try{
    i=9;

    }finally{
    i=10;
    }
    return i;
    }

    public static StringBuffer getSb(){
    StringBuffer sb=new StringBuffer("123");
    try{

    }finally{
    sb.append("sb");
    sb=null;

    }
    return sb;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(getI());
    System.out.println(getSb());
    }}
    这样效果就不一样了。
      

  5.   

    参数的传递~~
      这个问题好象问的很多了在csdn中
      

  6.   

    这是finally代码块的执行问题~
      

  7.   

    详细解答如下:
    public class Abc { public static int test(){
       int i=9;
       try{
        return i;
       }finally{
        i=10;
       }
     }
     public static StringBuffer test1(){
       StringBuffer  i=new StringBuffer(9);
       //注意StringBuffer(int i)是构造一个指定容量的StringBuffer变量;
    try{
    return i;
    }finally{
    i.append(10);
         //append(int i) 将 int 参数的字符串表示形式追加到此序列。
    i=null;
    } }
     public static void main(String[] arg){
    System.out.println(test());
    System.out.println(test1()); }}
    //答案:9,10//Java 的异常处理模型中, 
    //finally 块区域中的代码都是不能够通过重新赋值的方式来改变 try 区域中 return 语句的返回值。
    //所以i的返回值是不变的,当i是int型的数据时,返回值就是其本身;
    //当i是类类型的变量时,返回值是对象的引用(相当于指针),所以i.append(10)能发挥作用!
    //而i=null相当于改变i的引用(指针),让其指向一个空值,所在finally语句中并不被执行!
      

  8.   

    //Java 的异常处理模型中, 
    //finally 块区域中的代码都是不能够通过重新赋值的方式来改变 try 区域中 return 语句的返回值。
    //所以i的返回值是不变的,当i是int型的数据时,返回值就是其本身;
    //当i是类类型的变量时,返回值是对象的引用(相当于指针),所以i.append(10)能发挥作用!
    //而i=null相当于改变i的引用(指针),让其指向一个空值,所在finally语句中并不被执行!
    =======================================================
    以前还真没注意过受益