SORU
28 Temmuz 2014, PAZARTESİ


Java Son değişkenlere varsayılan değerler olacaktır?

Böyle bir program var:

class Test {

    final int x;

    {
        printX();
    }

    Test() {
        System.out.println("const called");
    }

    void printX() {
        System.out.println("Here x is "   x);
    }

    public static void main(String[] args) {
        Test t = new Test();
    }

}

Eğer çalıştırmak için çalışırsanız, derleyici hata olarak alıyorum 8* *java varsayılan değerlere göre aşağıda çıktı değil mi??

"Here x is 0".

Final değişkenler dafault değerler olacaktır?

eğer böyle Şifremi değiştirirsem

class Test {

    final int x;

    {
        printX();
        x = 7;
        printX();
    }

    Test() {
        System.out.println("const called");
    }

    void printX() {
        System.out.println("Here x is "   x);
    }

    public static void main(String[] args) {
        Test t = new Test();
    }

}

Çıktı olarak alıyorum

Here x is 0                                                                                      
Here x is 7                                                                                     
const called

Herkes bu davranış.. açıklayınız

CEVAP
28 Temmuz 2014, PAZARTESİ


http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html, "Örnek Üye Başlatılıyor": . bölüm

Java derleyici kopyaları her kurucu blok başlatıcı.

Şöyle ki:

{
    printX();
}

Test() {
    System.out.println("const called");
}

tam olarak ne gibi davranır:

Test() {
    printX();
    System.out.println("const called");
}

Böylece gördüğünüz gibi, örnek oluşturulduktan sonra, son alan definitely assigned, (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.2):

Değişken kesinlikle verilmelidir de boş son örneği hangi sınıf her bir kurucu sonu ; aksi halde ilan derleme zamanı hatası oluşur.

Süre yok gibi görünüyor belirtildiği explitely içinde docs (en azından ben değil bulur, son bir alanın geçici kabul varsayılan değer sona ermeden kurucu, böylece bir predictable value eğer sen oku önce ataması.

Varsayılan değerler: http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5

İkinci parçacık, x derleyici şikayet değil, örnek oluşturma başlatılmış

Test() {
    printX();
    x = 7;
    printX();
    System.out.println("const called");
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GenTechPC

    GenTechPC

    1 Temmuz 2007
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006