这个题目的关健点在于:try里的return执行完后的结果会临时储存一下,然后去执行完finally,
finally执行完后,如果没有return,那么会再把前面try时的return的值返回去,
注意:如果finally有return,则直接返回return的值,这个语句就结束了!不会再返回之前return里的值!
那个警告是表示你try了,但是没有catch,这个不影响程序运行.
public class Demo {
public static void main(String[] args) {
System.out.println(new Demo().test());
System.out.println(new Demo().test2());
System.out.println(new Demo().test3());
System.out.println(new Demo().test4());
}
int test() {
int x = 1;
try {
return x;
}
finally {
++x;---这个不用说,没有return,虽然x成了2,但没有返回去.结果是 1
}
}
boolean test2() {
boolean flag = false;
try {
return !flag;----这里先return了一个true,但没有返回,执行完finally后,有return,所以结果是false
} finally {
return flag;
}
}
int test3() {
int x = 1;
try {
return x;----这里先return了一个1,但没有返回,执行完finally后,有return ++x,所以结果是2
} finally {
return ++x;
}
}
int test4() {
try {
return func1();--这里先执行func1,打印"func1"后了一个1,但没有返回,只是临时存存,执行完finally里的func2后打印一个"func2",有return 2,所以结果是func1 func2 2
} finally {
return func2();
}
}
int func1() {
System.out.println("func1");
return 1;
}
int func2() {
System.out.println("func2");
return 2;
}
}
|