try、catch、finally与return

1 try catch finally语句基础知识 spa

  1. finally必定会被执行。
  2. try块发生异常才会执行catch块。
  3. 若是finally块中抛出异常,则整个try、catch、finally块中抛出异常。

 

 

 

2 try catch finally语句与return语句 3d

一、finally块必定会被执行。即便已经执行了return语句。code

例:blog

public class Test{
    public static String func(){
        Integer i=0;
        try{
            System.out.println("执行try语句块");//1
            return i.toString();//2
        }finally{
            System.out.println("开始执行finally语句块,i的值为:"+i);//3
            i++;//4
            System.out.println("结束执行finally语句块,i的值为:"+i);//5
        }
    }

    public static void main(String[] args) {
        System.out.println("开始执行main");//0
        System.out.println("执行func的结果为:"+func());//5
        System.out.println("结束执行main");//6
    }
}

 

输出:编译器

开始执行main
执行try语句块
开始执行finally语句块,i的值为:0
结束执行finally语句块,i的值为:1
执行func的结果为:0
结束执行main

 

 

从该例可看出,外层代码先获取方法的返回值,等待方法内部finally语句执行结束后,外层方法继续执行。即try、catch、finally语句中,执行return后,对当前返回的值作任何的修改,都不影响已经return的返回值。io

 

 

二、try块中有return语句,catch块中也必须有return语句。不然没法经过编译。编译

 

return语句在try-catch-finally块以前。显然这会提示异常,提示去除try{}catch(){}finally{}块。class

 

因为return通常都处于代码块执行的最后。因此若try块抛出异常,则return语句确定还未执行。异常被catch捕获,catch必须完成try没有完成的return。基础

 

 

三、若是finally块中有return 语句,则返回try或catch中的返回语句忽略。方法

public class TryCatchFinally {

    

    static int method(){

        try{

            return 0;

        }catch(Exception e){

            return 1;

        }finally{

            System.out.println("finally{}");

            return 2;

        }

    }

    

    public static void main(String[] args) {

        int i = method();

        System.out.println(i);

    }

}

 

输出:

finally{}

2

 

 

finally中有return语句,编译器会提示警告。

 

 

 

3 使用try、catch、finally语句块中须要注意

一、尽可能在try或者catch中使用return语句。经过finally块中达到对try或者catch返回值修改是不可行的。

二、finally块中避免使用return语句。由于finally块中使用return语句会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生。

三、finally块中避免再次抛出异常。不然整个包含try语句块的方法回抛出异常,而且会消化掉try、catch块中的异常。

相关文章
相关标签/搜索