- 新建 Test03
public class Test03 {
private static int number = 0;
public static void main(String[] args) {
// System.out.println(test01());
// System.out.println(test02());
// System.out.println(test03());
// System.out.println(test04());
System.out.println(test05());
System.out.println("number:" + number);
System.out.println("------------");
}
public static int test01(){
try{
number = 5 / number;
System.out.println("test01_try");
return number;
}catch (Exception e){
System.out.println("test01_catch");
return number++;
}finally {
System.out.println("test01_finally:" + number);
return ++number;
}
}
public static int test02(){
try{
number = 5 / number;
System.out.println("test02_try");
return number;
}catch (Exception e){
System.out.println("test02_catch");
return number++;
}finally {
System.out.println("test02_finally:" + number);
return number++;
}
}
public static int test03(){
try{
number = 5 / number;
System.out.println("test03_try");
return number;
}catch (Exception e){
System.out.println("test03_catch");
return ++number;
}finally {
System.out.println("test03_finally:" + number);
}
}
public static int test04(){
try{
number = 5 / number;
System.out.println("test04_try");
return number;
}catch (Exception e){
System.out.println("test04_catch");
return number++;
}finally {
System.out.println("test04_finally:" + number);
}
}
public static int test05(){
try{
number = 5 / number;
System.out.println("test04_try");
return number;
}catch (Exception e){
System.out.println("test04_catch");
return 1 == 2? 3:4;
}finally {
System.out.println("test04_finally:" + number);
}
}
}
总结:请依次执行 test01()、 test02() 、test03() test04()
- test01()得出:catch中的 return 执行了,但是最终执行了 finally 中的return并返回。
- test02()得出: return number++;时, 先返回再计算number的值
- test03()得出: return ++number; 先计算再返回值
- test04()得出: return number++;先计算了number 值,但返回时已经锚定了未计算之前的值
- test05()得出: return 1 == 2? 3:4; 返回4, 三目表达式先计算后返回



