本文研究的主要是Java中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");/* * Warning: finally block does not complete normally * 如果finally塊中包含了return語句,即使前面的catch塊重新拋出了異常,則調用該方法的語句也不會獲得catch塊重新拋出的異常,而是會得到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");/* * Warning: finally block does not complete normally * 如果finally塊中包含了return語句,即使前面的catch塊重新拋出了異常,則調用該方法的語句也不會獲得catch塊重新拋出的異常,而是會得到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的關係實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!