我有以下代码.
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块的值.任何人都可以解释为什么最终值被考虑而不是try块的返回值?
请不要回答,因为即使在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