import java.io.FileInputStream;
public class Test1 {
public static void main(String[] args) {
Test1 m = new Test1();
System.out.println(m.amethod());
}
public int amethod() {
try {
// 1,抛出异常
FileInputStream dis = new FileInputStream("test1.txt");
} catch (Exception ex) {
// 2.catch捕获异常,并执行
System.out.println("No such file found");
// 4,return 返回
return -1;
} finally {
// 3.finally一定会在return之前执行。(准确说,应该是return;语句)
System.out.println("Done finally");
}
return 0;
}
}
输出的结果为:
no such file found
Done finally
-1
总结:
finally其实仅在return语句执行前执行,如果return一个函数,那么会先执行函数,但是如果函数内有
return语句,那么finally就会在这个语句前执行。finally在catch中的return之前执行但是,如果catch中有返回值二finally中也有返回值会替换catch中的返回值,以为catch中的返回值存放在一个临时区中,try中的过程和catch是一样的。
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
public static String test() {
try {
System.out.println("try block");
return test1();
} finally {
System.out.println("finally block");
// return "finally";
}
}
public static String test1() {
System.out.println("return statement");
return "after return";
}
}
输出的结果:
try block
return statement
finally block
after return
所以关于finally记着一点:除非调用system.exit()让程序退出也就是将调用这个程序的进程断开了退出了这个程序就不会执行或断电等因素致使程序停止进程终止,否则无论任何因素finally块都一定会执行。