在finally块中为null赋值null
以下代码的输出是“Test Passed”; 谁能解释一下为什么?
public class Test { public static void main(String args[]) { System.out.println(new Test().print()); } protected StringBuilder print() { StringBuilder builder = new StringBuilder(); try { builder.append("Test "); return builder.append("Passed!!!"); } finally { builder = null; } }
基本上,Java的作用如下:
StringBuilder valueToReturn = builder.append("Passed!!!"); executeFinallyBlock(); return valueToReturn;
无论你在finally块中做什么,Java都会保留对要返回的值的引用,并返回该引用。 所以它变成了:
StringBuilder valueToReturn = builder.append("Passed!!!"); builder = null; return valueToReturn;
答案很简单。
Finally
块肯定会被执行,因为你没有从它返回任何值, try
块返回值将被传递给原来的调用者
try { builder.append("Test "); return builder.append("Passed!!!"); } finally { builder = null; }
因此,你得到“测试通过!!!”
将代码更改为
StringBuilder builder = new StringBuilder(); try { builder.append("Test "); return builder.append("Passed!!!"); } finally { return null; }
肯定会按预期打印“null”
- Struts 2和Hibernate中的exception处理
- Scala期货和`andThen`exception传播
- Java ImageIO IIOException:不支持的图像类型?
- RSA BadPaddingException:数据必须以零开头
- 使用Jquery和servlet检索图像会产生HTTP状态500错误
- ConcurrentModificationException的
- com.sun.mail.smtp.SMTPSendFailedException:530-5.5.1需要validation
- 如何使用Intellij Idea的exception断点
- 如何在java中将包含逗号的数字字符串解析为整数?