try
Yürütülmesi ile blok tamamlar return
tablosu ve değerinin s
zaman return
tablosu yürütür yöntemi tarafından döndürülen bir değerdir. Aslında finally
hükmü sonradan değerini değiştirir s
(sonra return
ifadesi tamamlanıncaya) dönüş değerini değiştirmek (bu noktada) değildir.
Yukarıdakilerin , referans veren nesneye değil s
, finally
bloktaki kendisinin değerindeki değişikliklerle s
ilgilendiğini unutmayın. Eğer s
kesilebilir bir nesne için bir referans (ki String
değildir) ve içeriği nesnenin değiştiğini finally
blok, daha sonra bu değişiklikler verilen değer görülebilir.
Tüm bunların nasıl çalıştığına dair ayrıntılı kurallar Java Dil Spesifikasyonu Bölüm 14.20.2'de bulunabilir . Bir return
ifadenin yürütülmesinin try
bloğun ani bir sonlandırılması olarak sayıldığına dikkat edin (" Try bloğunun yürütülmesi başka herhangi bir nedenle R .... ' nin yürütülmesi aniden tamamlanırsa " başlayan bölüm geçerlidir). Bir ifadenin neden bir bloğun aniden sonlandırılması olduğunu öğrenmek için JLS Bölüm 14.17'ye bakın return
.
Daha ayrıntılı olarak: Bir ifadenin hem try
bloğu hem de bloğu ifadeler nedeniyle aniden sona ererse, §14.20.2'deki aşağıdaki kurallar geçerlidir:finally
try-finally
return
try
Bloğun yürütülmesi başka herhangi bir nedenle R [bir istisna atmanın yanı sıra] aniden tamamlanırsa, finally
blok yürütülür ve sonra bir seçim vardır:
- Eğer
finally
blok ardından, normalde tamamlar try
nedeni R. için deyim tamamlamalar aniden
- Eğer
finally
blok nedeni S aniden tamamlar, sonra try
aniden nedeni S için deyim tamamlamalar (ve neden R atılır).
Sonuç, bloktaki ifadenin tüm ifadenin dönüş değerini belirlemesi return
ve finally
bloktan try-finally
döndürülen değerin try
atılmasıdır. Benzer bir şey meydana try-catch-finally
eğer deyimi try
blok, bir tarafından yakalanan bir özel durum atar catch
bloğu ve her iki catch
blok ve finally
blok var return
ifadeleri.