先看这段代码,两个静态方法,MAIN方法和 hanshu()方法,
这两个方法随着Test5类的加载而加载,他们两个应该都在栈内存中,栈中的方法要用完就消失,不用完不消失,
所以在MAIN方法中不用用创建对象就可以直接调用静态成员hanshu()方法,
静态成员hanshu()方法的返回值是int型的,
在看静态成员hanshu()方法的方法体,int x=0 ,其中 x 是在内存中是地址值,地址值不变,初始化的值是0,
先明白return 是要结束这个静态成员hanshu()方法的并且还要返回值的,所以finally代码应该在return前执行
记住try.....finally语句中都有return,既有两个return,那么finally代码块中return将会覆盖别处的return,最终返回调用者是finally代码块中return的值,由于方法内部定义的变量都在栈中,当方法结束后,栈就被回收,方法体中的变量就不存在了,,因此return在返回时,不是直接返回变量的值,,而是复制一份,然后返回。
你可以把这个代码的MAIN方法中的代码改成这样,
int result = hanshu();
System.out.println(result);
你会发现最后return的值是2,那么finally代码块的输出在这个return的值是2的前面
以上所述,有前提是 这个 hanshu()方法是静态的,并且返回值是基本数据类型的。 |