tryYürütülmesi ile blok tamamlar returntablosu ve değerinin szaman returntablosu yürütür yöntemi tarafından döndürülen bir değerdir. Aslında finallyhükmü sonradan değerini değiştirir s(sonra returnifadesi tamamlanıncaya) dönüş değerini değiştirmek (bu noktada) değildir.
Yukarıdakilerin , referans veren nesneye değil s, finallybloktaki kendisinin değerindeki değişikliklerle silgilendiğini unutmayın. Eğer skesilebilir bir nesne için bir referans (ki Stringdeğildir) ve içeriği nesnenin değiştiğini finallyblok, 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 returnifadenin yürütülmesinin trybloğ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 trybloğu hem de bloğu ifadeler nedeniyle aniden sona ererse, §14.20.2'deki aşağıdaki kurallar geçerlidir:finallytry-finallyreturn
tryBloğun yürütülmesi başka herhangi bir nedenle R [bir istisna atmanın yanı sıra] aniden tamamlanırsa, finallyblok yürütülür ve sonra bir seçim vardır:
- Eğer
finallyblok ardından, normalde tamamlar trynedeni R. için deyim tamamlamalar aniden
- Eğer
finallyblok nedeni S aniden tamamlar, sonra tryaniden nedeni S için deyim tamamlamalar (ve neden R atılır).
Sonuç, bloktaki ifadenin tüm ifadenin dönüş değerini belirlemesi returnve finallybloktan try-finallydöndürülen değerin tryatılmasıdır. Benzer bir şey meydana try-catch-finallyeğer deyimi tryblok, bir tarafından yakalanan bir özel durum atar catchbloğu ve her iki catchblok ve finallyblok var returnifadeleri.