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
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.
Neden' ◎ܫ◎ ve fonksiyonu t JavaSc...
Nasıl değeri{kullanıcı} $Eclipse şablo...
Neden kısa, ama int değişken değil ben...
ekran giriş:blok blok değil, neden olm...
Neden't a '' deyim deva...