随笔-204  评论-149  文章-0  trackbacks-0

由一个笔试题想到的
try有return,catch也有return,且有finally块
并且finally中对resutl进行的赋值并不影响之前的已经return 的result值
最后返回的result引用还是之前的result引用
finally其实也可以有return,一般eclipse会提示finally block does not complete normally,但不会报错
并且会忽略之前的返回和抛出的异常

package returnfinally;

public class TestReturnAfterFinally {

     
public static void main(String[] args) {
      
try {
       String result 
= testException();
       System.out.println();
       System.out.println(result);
      }
 catch (Exception e) {
      
// System.out.println(result);
       System.out.println(e.toString());
      }

     }

     
    
public static String testException() throws Exception {
      String result 
= "";
      
try {
       
// if (true) throw new MyException("异常!");
       
//int i = 0;
       int i=0;
       
int b = 10 / i;
       
//函数不会正常的返回,在返回前已经抛出异常了,抛出异常即函数返回了
       /*
        * 相当于catch(Exception e){
        *    throw e;
        * }
        
*/

       
/*
       result="in try";
       return result;
       
*/

       
throw new Exception("h");
      }
catch(Exception e){
          System.out.println(e);
          Exception ee 
= e;
          
//throw ee;
          result="in catch";
          
return result;
      }

      
finally {
       result 
= "in finally!";
       System.out.println(result);
       
//return result;
       
//throw new Exception("ex cretated in finally");
      }

      
      
//return result;
     }


    }




 

posted on 2009-04-30 16:04 Frank_Fang 阅读(2267) 评论(3)  编辑  收藏 所属分类: Java编程

评论:
# re: java try return finally 2009-04-30 16:17 | Frank_Fang
刚看见一个分析,不过后面的使用javap没看懂
http://blog.csdn.net/nomad2/archive/2006/05/10/722764.aspx  回复  更多评论
  
# re: java try return finally 2009-05-24 23:14 | Frank_Fang
主要关注一下finally中有return 或者throw时程序的执行流程
  回复  更多评论
  
# re: java try return finally 2009-05-24 23:14 | Frank_Fang
java中finally子句是怎么运行的?

看下面的程序:

public class JVMTest {

public static void main(String[] args){
System.out.println("aa:" + aa());
}
public static int aa(){
int a = 1;
int b = 10;
try{
System.out.println("abc");
return a;
}finally{
a = 2;
System.out.println("a: "+ a);
}
}
}

运行结果为:

abc
a: 2
aa:1

由此可知:在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。

在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,

因此,即使finally中对变量a进行了改变,但是不会影响返回结果。

但是,如果在finally子句中最后添加上return a会怎样呢?

执行结果如下:

Compiling 1 source file to E:\sun\InsideJVM\build\classes
E:\sun\InsideJVM\src\JVMTest.java:37: warning: finally clause cannot complete normally
}
1 warning
compile-single:
run-single:
abc
a: 2
aa:2

  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: