天天看點

java中finally與return_Java中finally和return的關系執行個體解析

本文研究的主要是Java中finally和return的關系,具體介紹和執行個體如下所示。

finally 和 return 關系的總結

1.try塊中有System.exit(0)這樣的語句,由于它是終止Java虛拟機JVM的,連JVM都停止了,所有都結束了,當然finally語句也不會被執行到。

2.其它情況下,finally語句都必然會被執行。是以可以在這裡執行一些資源的釋放操作。

(1)finally中的return會覆寫try/catch中的renturn。

(2)在finally中寫return語句會有警告,因為它會阻止函數抛出異常,而改為正常傳回。

package com.demo.test;

public class FinallyAndReturn {

private static void finallyAndTryReturn() {

try {

System.out.println("finallyAndTryReturn -> try");

return;

}

catch (Exception e) {

System.out.println("finallyAndTryReturn -> catch");

}

finally {

System.out.println("finallyAndTryReturn -> finally");

}

}

private static void finallyAndCatchReturn() {

try {

System.out.println("finallyAndCatchReturn -> try");

throw new Exception();

}

catch (Exception e) {

System.out.println("finallyAndCatchReturn -> catch");

return;

}

finally {

System.out.println("finallyAndCatchReturn -> finally");

}

}

// finally語句是在try的return語句執行之後,return傳回之前執行。

private static String tryReturn() {

String str = "initialized";

try {

System.out.println("tryReturn -> try");

str = "try";

return str;

}

catch (Exception e) {

System.out.println("tryReturn -> catch");

str = "catch";

}

finally {

System.out.println("tryReturn -> finally");

str = "finally";

}

return null;

}

private static String tryReturnAndFinallyReturn() {

String str = "initialized";

try {

System.out.println("tryReturnAndFinallyReturn -> try");

str = "try";

return str;

}

catch (Exception e) {

System.out.println("tryReturnAndFinallyReturn -> catch");

str = "catch";

}

finally {

System.out.println("tryReturnAndFinallyReturn -> finally");

str = "finally";

return str;

}

}

private static String tryThrowAndFinallyReturn() throws Exception {

String str = "initialized";

try {

System.out.println("tryThrowAndFinallyReturn -> try");

str = "try";

throw new Exception();

}

catch (Exception e) {

System.out.println("tryThrowAndFinallyReturn -> catch");

str = "catch";

throw new Exception();

}

finally {

System.out.println("tryThrowAndFinallyReturn -> finally");

str = "finally";

return str;

}

}

private static void finallyAndRuntimeException() {

try {

System.out.println("finallyAndRuntimeException -> try");

throw new RuntimeException();

}

catch (Exception e) {

System.out.println("finallyAndRuntimeException -> catch");

}

finally {

System.out.println("finallyAndRuntimeException -> finally");

}

}

private static void finallyAndExit() {

try {

System.out.println("finallyAndExit -> try");

// System.exit(0);是終止Java虛拟機JVM的,連JVM都停止了,所有都結束了,當然finally語句也不會被執行到。

System.exit(0);

}

catch (Exception e) {

System.out.println("finallyAndExit -> catch");

}

finally {

System.out.println("finallyAndExit -> finally");

}

}

public static void main(String[] args) {

finallyAndTryReturn();

System.out.println();

finallyAndCatchReturn();

System.out.println();

System.out.println("tryReturn return -> " + tryReturn());

System.out.println();

System.out.println("tryReturnAndFinallyReturn return -> " + tryReturnAndFinallyReturn());

System.out.println();

try {

System.out.println("tryThrowAndFinallyReturn return -> " + tryThrowAndFinallyReturn());

}

catch (Exception e) {

e.printStackTrace();

}

System.out.println();

finallyAndRuntimeException();

System.out.println();

finallyAndExit();

}

}

示範結果:

java中finally與return_Java中finally和return的關系執行個體解析