本帖最后由 张洪慊 于 2013-5-20 15:00 编辑
- class TryFinallyTest{
- private int x;
- public int method(){
- try {
- System.out.println("初始x值为"+x);
- return x;
- }
-
- finally {
- System.out.println("hehe");
- //return x+=2 //②
- }
- //return x+=2;
- /*
- 这里为什么不能return?
- finally上没有catch代码块
- 那么
- ①如果try代码块中的语句发生异常,那么发生的是
- 编译时不被检测异常->RuntimeExcetption类异常
- (因为非该类型异常要么try..catch要么throws)
- 会在return前执行finally代码块中内容->return
- finally下面语句执行不到,
- 注意在返回时该方法上
- 会有一个隐式的throws RuntimeException(或其子类)
- ②如果try代码块中不发生异常,依然会在return前执行finally代码块中内容->return
- finally下面语句依然执行不到
- 此时可以把return放在finally中(②),finally代码顺序执行
- 使用finally中的return,不再是try中的return
- */
-
- }
- public static void main(String[] args){
- System.out.println(new TryFinallyTest().method());
-
- }
- }
复制代码
- class TryFinallyTest2{
- private int x;
- public int method(){
- try {
- //java.io.FileReader fr=new java.io.FileReader("k://abc.txt");//我这个一定发生异常,没有K盘符
- //System.out.println(x);
- return x;
- }
- catch(java.io.IOException e){
- //System.out.println("文件不存在");
- }
- finally {
- //System.out.println("hehe");
-
- }
- return x+=2;
- /*
- 这里之所以可以return,个人能理解,编译器
- 认为该语句有可能被执行到:当try中在return之前发生异常,程序跳转
- catch对其处理后,程序继续向下执行,如果下面有return语句,那么try中
- return 不再执行.
- */
-
- }
- public static void main(String[] args){
- System.out.println(new TryFinallyTest2().method());
- /*
- 文件不存在
- hehe
- 2
- */
-
- }
- }
复制代码 |