在日志中很清晰的表现了,先执行try的日志,再执行finally内的日志,最后打印try中return的返回值
为什么return没有拦截finally呢?
try 块中的返回操作: return 指令会将返回值准备好。 但是返回值并不会立刻返回,而是先将当前栈帧(包含 try 代码块中计算的返回值)保存。
执行 finally 块: JVM 会确保在返回值被提交给调用者之前执行 finally 块。 这是因为 finally 块在字节码层面有更高的执行优先级,JVM 会在方法返回前处理 finally 代码块的内容。
return 指令: 最终,return 指令会将返回值返回给调用者。
总结:Java 在执行 try
块中的 return
时,并不会立即返回值,而是会先执行 finally
块。原因在于 Java 的字节码执行模型和异常处理机制保证了 finally
块的执行优先级高于返回值的提交。这是由 JVM 的控制流设计来确保 finally
中的资源释放等清理工作总是被执行。
如果try和finally都有return呢?
没有try的return的打印!
为什么 try 中的 return 没有返回值?
在 Java 中,如果 try 块中执行了 return,方法并不会立刻返回结果,而是会先进入 finally 块并执行其中的代码。如果 finally 块中有 return,它会覆盖 try 块中的 return 值,导致最终返回的是 finally 中的值。 这是 Java 中的一个特性:finally 中的 return 语句会“抢占” try 中的返回值,导致 try 中的 return 被忽略。
标签:return,try,finally,返回值,执行,Java From: https://blog.csdn.net/qq_54114915/article/details/145109425