首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java面试 >

Java面试有关问题之五

2012-10-14 
Java面试问题之五详细分析以下代码段,给出执行结果及其原因。public class WithReturn{public int methodA(

Java面试问题之五
详细分析以下代码段,给出执行结果及其原因。

public class WithReturn{  public int methodA(int money) throws SpecialException{       if(--money<=0)            throw new SpecialException("Out of money!!");       return money;  }  public int methodB(int money){      try{          System.out.println("Begin");          int result=methodA(money);    //此处可能抛出异常          return result;      }catch(SpecialException e){          System.out.println(e.getMessage());          return -100;      }finally{             System.out.println("Finally");      }  }  public static void main(String[] args){       System.out.println(new WithReturn().methodB(1));  }}




问题分析:由于return语句用于退出方法。在执行try或者catch语句中使用return语句,如果最后还有finally代码块,则程序会首先finally代码块中的语句,然后在执行返回语句。

所以,上面代码段的结果是:
Begin
Out of money
Finally
-100


但是,值得注意的一点就是,企图在finally代码块中修改返回语句返回的值是不行的。也就是说,finally代码块不能通过重新给变量赋值的方式来改变return语句的返回值。

例如,以下代码执行后的结果是0而不是1。
public static int test(){     int a=0;     try{         return a;     }finally{         a=1;     }}public static void main(String[] args) throws Exception{      System.out.println(test());}


另外,尽量避免在finally中使用return语句,因为它具有两种风险。第一,会覆盖掉try/catch代码块中的return语句返回的值。第二就是,有可能会丢失异常。所以不要在finally代码块中使用return语句是一个良好的编程习惯,一定要谨记!

热点排行