try catch finally与return的执行顺序
1.不管有无异常,finally里的语句都会执行
(通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等 )
2.当try 或catch 块里有return语句时,finally仍会执行
3.finally语句里不能包含return语句(实践证明可以包含,但是需要加上@SuppressWarnings("finally"),当包含return时候,程序会到此为止,不再往下执行)
4.finally在return(不论是try或catch里的return)前执行,不会改变已经确定的return值
代码一
import java.io.*;public class Mine{ public static void main(String argv[]){ Mine m=new Mine(); System.out.println(m.amethod()); }public int amethod(){ try{ FileInputStream dis =new FileInputStream("Hello.txt");[color=red] //1,抛出异常[/color] }catch ( Exception ex) { System.out.println("No such file found"); [color=red]//2.catch捕获异常,并执行[/color] return -1; [color=red]//4,return 返回[/color] }finally{ System.out.println("Doing finally"); [color=red]//3.finally一定会执行,在return之前。[/color] } return 0; }}
运行结果:
C:\java>java Mine
No such file found
Doing finally
-1
运行顺序是1.2.3.4
如果在finnally写入return,则程序到此终止,不在执行4即是不在返回-1
代码二
public class Test {int a;public int amethod() {try {System.out.println("mmmm");//1.此处没有异常,所以不再走catch,return a; //3.return返回0} catch (Exception ex) {return a;} finally {a++;System.out.println(a); // 2.finally一定会执行,在return之前。此处输出1}}public static void main(String argv[]) {Test m = new Test();System.out.println(m.amethod());}}
运行结果:
mmmm
1
0