java – 理解try catch最后返回它返回的值和值
发布时间:2020-12-14 05:58:12 所属栏目:Java 来源:网络整理
导读:我有以下代码. public static void main(String[] args) { System.out.println(returnString());}private static String returnString(){ try { System.out.println("Executing try"); return "Return try value"; } catch (Exception e){ System.out.printl
我有以下代码.
public static void main(String[] args) { System.out.println(returnString()); } private static String returnString(){ try { System.out.println("Executing try"); return "Return try value"; } catch (Exception e){ System.out.println("Executing Catch"); return "Return catch value"; } finally { System.out.println("Executing finally"); return "Return finally value"; } } 这个输出是 Executing try Executing finally Return finally value 如果我改变我的finally块而不返回任何类似的东西 public static void main(String[] args) { System.out.println(returnString()); } private static String returnString(){ try { System.out.println("Executing try"); return "Return try value"; } catch (Exception e){ System.out.println("Executing Catch"); return "Return catch value"; } finally { System.out.println("Executing finally"); } } 然后输出是 Executing try Executing finally Return try value 现在我明白了,除非我们调用system.exit(0),否则最终总会被执行;调用或JVM崩溃. 请不要回答,因为即使在try块中有返回,最终也会执行…或者最后只有在有system.exit(0)时才执行;调用或JVM崩溃.据我所知. 编辑:(根据Dirk的Dirk评论) public static void main(String[] args) { System.out.println(returnString()); } private static String returnString(){ try { System.out.println("Executing try"); return printString("Return try value"); } catch (Exception e){ System.out.println("Executing Catch"); return printString("Return catch value"); } finally { System.out.println("Executing finally"); return printString("Return finally value"); } } private static String printString(String str){ System.out.println(str); return str; } 输出: Executing try Return try value Executing finally Return finally value Return finally value 解决方法
在从主块返回之前,JVM必须确保执行finally块,因此它就是这样做的.想法是执行finally块然后返回并从主块执行return语句.但是如果你在finally块中有一个return语句,那么它将在执行finally块时执行…这意味着控制永远不会返回到主块来完成return语句.
> JVM遇到主块中的return语句.它暂停主块的执行并检查finally子句. 但请注意,try块的返回表达式将被计算然后被丢弃.如果它有副作用,这很重要.因此,如果您的主要块已返回i,那么这将对返回值没有影响,但我仍然会增加. (感谢Dirk指出这一点.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |