1.try catch finally中的finally不管在什么情况之下都会执行,执行的时间是在程序return之前。
2.Java编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块(分支不属于此列),所以以下程序编译会报错:
package com.practice.model;
public class Test {
public String testSeq() {
String result="end";
int i = 0;
try {
System.out.println(6/i);
// System.out.println(i);
System.out.println("in try...");
return result;
} catch (Exception e) {
e.printStackTrace();
System.out.println("In catch...");
return result;
} finally {
System.out.println("In finally....");
// return result;
}
return result;
}
public static void main(String[] args){
Test test=new Test();
String rs=test.testSeq();
System.out.println("result = "+rs);
}
}
原因是由于try{...}catch{...}块中都已存在return。
3.以下是几个小例子:
1)
package com.practice.model;
public class Test {
public String testSeq() {
String result1="Normal";
String result2="Exception";
int i = 0;
try {
// System.out.println(6/i);
System.out.println(i);
System.out.println("in try...");
return result1;
} catch (Exception e) {
e.printStackTrace();
System.out.println("In catch...");
return result2;
} finally {
System.out.println("In finally....");
}
}
public static void main(String[] args){
Test test=new Test();
String rs=test.testSeq();
System.out.println("result = "+rs);
}
}
执行结果是:
0
in try...
In finally....
result = Normal
2)
package com.practice.model;
public class Test {
public String testSeq() {
String result1="Normal";
String result2="Exception";
int i = 0;
try {
System.out.println(6/i);
// System.out.println(i);
System.out.println("in try...");
return result1;
} catch (Exception e) {
e.printStackTrace();
System.out.println("In catch...");
return result2;
} finally {
System.out.println("In finally....");
}
}
public static void main(String[] args){
Test test=new Test();
String rs=test.testSeq();
System.out.println("result = "+rs);
}
}
执行结果是:
java.lang.ArithmeticException: / by zero
at com.practice.model.Test.testSeq(Test.java:9)
at com.practice.model.Test.main(Test.java:24)
In catch...
In finally....
result = Exception