当前位置: 58彩票app下载 > 关于计算机 > 正文

Java中finally和return的涉嫌实例解析,finally实施顺

时间:2019-10-06 19:18来源:关于计算机
Java中finally和return的涉嫌实例深入分析,finallyreturn 正文研商的严重性是Java中finally和return的涉及,具体介绍和实举例下所示。 英特网有好几个人研讨Java中格外捕获机制try...catch...final

Java中finally和return的涉嫌实例深入分析,finallyreturn

正文研商的严重性是Java中finally和return的涉及,具体介绍和实举例下所示。

英特网有好几个人研讨Java中格外捕获机制try...catch...finally块中的finally语句是还是不是束手待毙会被实行?相当多少人都说不是,当然他们的回应是准确的,经过本身试验,足足有两种景况下finally语句是不会被实行的:

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();
 }
}

演示结果:

图片 1

(1)try语句未有被实行到,如在try语句在此以前就赶回了,那样finally语句就不会施行,那也证明了finally语句被执行的须要而非充裕标准是:相应的try语句一定被奉行到。

总结

上述正是本文关于Java中finally和return的关系实例深入分析的全体内容,希望对大家具备助于。感兴趣的相恋的人能够承袭参照本站其余相关专项论题,如有不足之处,款待留言提议。谢谢朋友们对本站的帮衬!

本文切磋的要紧是Java中finally和return的涉嫌,具体介绍和实比方下所示。 finally 和 return 关系...

(2)在try块中有System.exit(0);那样的言语,System.exit(0);是终止Java虚拟机JVM的,连JVM都甘休了,全部都终止了,当然finally语句也不会被施行到。

理所必然还可能有非常多个人斟酌finally语句的执行与return的涉及,颇为令人吸引,不掌握finally语句是在try的return以前实行可能今后推行?笔者也是壹只雾水,我觉着她们的传道都不得法,作者觉着应该是:finally语句是在try的return语句实践之后,return再次回到以前施行。那样的传教有一点争论,恐怕是自个儿发挥不太明白,上边笔者付出本身考试的有的结果和示范进行佐证,有哪些难题招待大家建议来。

图片 2

图片 3

图片 4

图片 5

图片 6

末尾计算:finally块的言辞在try或catch中的return语句推行之后回来在此以前实践且finally里的修改语句恐怕影响也或许不影响try或catch中 return已经鲜明的再次来到值,若finally里也会有return语句则覆盖try或catch中的return语句直接回到。

编辑:关于计算机 本文来源:Java中finally和return的涉嫌实例解析,finally实施顺

关键词: