原則として、ブロック内で例外がスローされるかどうか、またはブロック自体で , または ステートメントが発生するかどうかにかかわらず、ブロックは常に実行finally
されます。try
continue
break
return
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
新しい値を返す必要があります。そうじゃない?