try-catch-finally可能输出的答案?
try-catch-finally都有返回值时候的处理方案:
1、如果try、catch、finally分别都有返回值时候,最终finally的返回值会覆盖他们两个中的其中一个。
eg:
public static void main(String[] args) {System.out.println(testFinally());}public static String testFinally() {try {System.out.println("try block");int i =1/0;return "return in try"; // (1) 先计算返回值,但不立即返回} catch (RuntimeException e) {return "catch";} finally {return "return in finally"; // (2) finally 的 return 会覆盖 try 的 return}}
运行后的结果
try block
return in finally
2、如果 finally 没有返回值 只是有一段处理逻辑,在执行到return 语句时候 会先执行finally块里面代码的逻辑,然后才会返回return 之后的逻辑。
eg:
public class FinallyTest {public static void main(String[] args) {System.out.println(testFinally()); // 调用 testFinally() 并打印返回值}public static String testFinally() {try {System.out.println("try block"); // (1) 先执行return "return in try"; // (2) 计算返回值,但不立即返回} finally {System.out.println("finally block1"); // (3) 在 return 前执行System.out.println("finally block2"); // (4) 继续执行}// (5) 最后返回 try 中的 "return in try"}
}
运行结果:
try block
finally block1
finally block2
return in try
3、总结
一但遇到return语句之后就会先执行 finally 代码块里面的逻辑,如果finally代码块里面有return将作为最终结果返回,反之则是之前的代码块中的 return 作为结果返回。