-
在 try-catch-finally 语句中,finally一定会被执行吗?
- 在 try 没有被执行到时,finally语句不会执行
- 在 try 中有 System.exit(0),时finally不会执行。因为 System.exit(0) 终止了 java 虚拟机JVM 。
-
若在try中出现return语句,finally语句什么时候执行?
public class practice {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int a=10;
try{
System.out.println("try-----");
return a = a+50;
}
catch(Exception e){
System.out.println("catch---");
}
finally{
System.out.println("finally---");
if(a>50){
System.out.println("a > 50,a = "+a);
}
}
return a;
}
}
输出结果:
try-----
finally---
a > 50,a = 60
60
finally语句在return语句执行之后,return语句返回之前执行
return语句已经执行了再执行finally语句,不过没有直接返回,而是等finally语句执行完才返回
- 若在finally中也出现return结果又当怎样?
public class practice {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int a=10;
try{
System.out.println("try-----");
return a = a+50;
}
catch(Exception e){
System.out.println("catch---");
}
finally{
System.out.println("finally---");
if(a>50){
System.out.println("a > 50,a = "+a);
}
return a+100;
}
}
}
输出结果:
try-----
finally---
a > 50,a = 60
160
finally 中的 return 语句会覆盖 try 中的 return 语句
- 如果 finally 中没有 return 语句,但是改变了变量 a 的值,结果又会怎样?
public class practice {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int a=10;
try{
System.out.println("try-----");
return a = a+50;
}
catch(Exception e){
System.out.println("catch---");
}
finally{
System.out.println("finally---");
if(a>50){
System.out.println("a > 50,a = "+a);
}
a = 200;
}
return 300;
}
}
输出结果:
try-----
finally---
a > 50,a = 60
60
由于 finally 中没有 return 语句覆盖,原来返回值不变
5. 若发生异常导致 try 中的 return 没有执行,而是执行了catch 语句
此时 catch 和 finally 对变量 a 的修改就会影响返回值
6. 如果 catch 中有 return 又当如何执行?
public class practice {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int a=10;
try{
System.out.println("try-----");
a = a/0;
return a = a+50;
}
catch(Exception e){
System.out.println("catch---");
return a = a+500;
}
finally{
System.out.println("finally---");
if(a>50){
System.out.println("a > 50,a = "+a);
}
a = 200;
}
}
}
输出结果:
try-----
catch---
finally---
a > 50,a = 510
510
0当发生异常后,catch 中的 return 执行情况与未发生异常时 try 中执行情况相同