SORU
16 NİSAN 2013, Salı


Neden bir nihayet döndü değişken değiştirme blok iade değişim değeri değil mi?

Aşağıda gösterildiği gibi basit bir Java Dersim var:

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;
        } 
        finally {
            s = "override variable s";
            System.out.println("Entry in finally Block");  
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo());
    }
}

Ve bu kod çıktı bu

Entry in finally Block
dev  

Neden s finally blok geçersiz kılınmış, henüz yazdırılan çıktının kontrolü değil mi?

CEVAP
16 NİSAN 2013, Salı


try Blok return deyimi yürütme ile tamamlar ve return deyimi yürütür zamanda s değeri değeri yöntemi tarafından döndürülür. finally yan üstü s değeri return ifadesi tamamlandıktan sonra () değiştiği (bu noktada) dönüş değeri değiştirmez.

Yukarıdaki s başvuran nesne finally blok s kendi değerini değil, değişiklikler ile ilgili not. s eğer değişken bir nesne başvurusu String değildir) veiçindekilernesne finally blok değiştirilmiş, daha sonra bu değişiklikleri geri değer olarak görülecektir.

Bu nasıl işlediğine ilişkin detaylı kuralları Section 14.20.2 of the Java Language Specification bulunabilir. return bir deyimi yürütme try blok ani bir fesih sayılır unutmayın (bölüm başlangıç "Eğer try bloğu yürütme aniden başka bir nedeni R için tamamlarsa....< . em ^/ " geçerlidir). return bir deyim bloğunun ani bir sonlandırma için Section 14.17 of the JLS bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • engineerguy

    engineerguy

    10 Ocak 2010