通常,finally
无论是否在块中引发异常try
或在块本身中遇到continue
, break
orreturn
语句,该块总是被执行。try
因此,应该更改下面给出的代码片段中方法的返回值,但它没有。
final class Product
{
private String productName=null;
public Product(String productName)
{
this.productName=productName;
}
public String getProductName()
{
try
{
return this.productName;
}
finally
{
this.productName="The product name has been modified in the finally block.";
System.out.println("Product name in the finally block : "+this.productName);
}
}
}
public final class Test
{
public static void main(String...args)
{
System.out.println(new Product("Intel core i3").getProductName());
}
}
该方法只是在调用此方法之前getProductName()
返回由构造函数分配给该字段的产品名称。productName
在此方法返回之前,在块productName
中修改了的值。因此,该方法应该返回这个新的修改值,但它返回的是在构造此类的实例时finally
分配给的初始值。productName
它产生以下输出:
finally 块中的产品名称:产品名称已在 finally 块中进行了修改。
英特尔酷睿 i3
为什么此方法不返回分配给块中productName
字段的新值finally
?它应该返回新值。不应该吗?