总结执行顺序:
1、先执行try/catch
2、在执行finally
3、执行return
测试代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 测试try catch finally return的执行顺序
* 执行顺序:
* 1、先执行try/catch
* 2、在执行finally
* 3、执行return
* @author Administrator
*
*/
public class TestReadFile {
public static void main(String[] args) {
String str = new TestReadFile().OpenFile();
System.out.println(str);
}
String OpenFile(){
try {
System.out.println("aaa");
FileInputStream fis = new FileInputStream("d:/a.txt");
int a = fis.read();
System.out.println("bbb");
return "step1";
} catch (FileNotFoundException e) {
System.out.println("cathching!");
// TODO Auto-generated catch block
e.printStackTrace();//先确定返回的值,并不会直接结束运行!
return "step2";
} catch(IOException e) {
e.printStackTrace();
return "step3";
}finally {
System.out.println("finally!!!!!");
//return "fff";
//不要再在finally中使用return!
}
}
}
正常执行的结果(从try块return):
aaa
bbb
finally!!!!!
step1
非正常执行的结果(从catch块return):
aaa
cathching!
java.io.FileNotFoundException: d:\aasa.txt (系统找不到指定的文件。)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at TestReadFile.OpenFile(TestReadFile.java:22)
at TestReadFile.main(TestReadFile.java:16)
finally!!!!!
step2
finally块中增添return正常执行(try)的结果:
aaa
bbb
finally!!!!!
fff
finally块中增添return非正常执行(catch)的结果:
aaa
cathching!
finally!!!!!
fff
java.io.FileNotFoundException: d:\aaa.txt (系统找不到指定的文件。)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at TestReadFile.OpenFile(TestReadFile.java:22)
at TestReadFile.main(TestReadFile.java:16)