2011-07-05 18 views
7

Bu hatayı günümüzde kodumuza rastladım ve anlaması biraz zaman aldı. Onu ilginç buldum, paylaşmaya karar verdim.Java Statik hakkında soru

public class Test { 

    static 
    { 
     text = "Hello"; 
    } 

    public static String getTest() { 
     return text + " World"; 
    } 

    private static String text = null; 
} 

neyi Test.getTest(); döner & neden Tahmin: Burada sorunun basitleştirilmiş bir versiyonudur?

+3

belgelerine statik başlatma kaynak kodda göründüğü sırayla olur belirtmektedir, bu nedenle dibine statik blok hareket halinde bunun "Merhaba Dünya" dönecektir "boş Dünyası" döndürür O Tam olarak beklendiği gibi "boş Dünya" yazdırır. Kodda tam olarak ne olduğunu düşünüyorsunuz? – Perception

+0

Bu bir hata değil. – RMT

+2

http://ideone.com/7SV0w –

cevap

18

"Boş dünya" yazdırmalı. Statik başlatmalar listelenen sırada yapılır. Statik bloktan daha yüksek beyanı hareket ettirirseniz, "Merhaba Dünya" yı almalısınız.

+1

tam olarak ne olur. – Jacob

+0

+1 iyi cevap! – RMT

+2

'Çalışma zamanı sistemi, statik başlatma bloklarının kaynak kodunda göründükleri sırayla çağrılmasını sağlar. 'Http://download.oracle.com/javase/tutorial/java/javaOO/initial.html – Jacob

0

null World döndürür, çünkü text değişkeni iki kez başlatılır, ilk kez "Merhaba" ve ikinci kez sıfırdır. text değişken bildiriminizi statik başlangıçtan önce hareket ettirirseniz Hello World elde edersiniz.

0

Yanıt "boş Dünya" olmalıdır.

0

Java Initializers, kaynak kodda göründükleri sırayla yürütülecek şekilde tanımlanmıştır, böylece sıfırlama metniniz siz null değerini metne atamadan önce çalışır.

Bu tür hatalara karşı ipucu: Statik değişkenlerinizi sonlandırın veya statik değişkenler kullanmayın.