2013-04-06 24 views
7

Sınıf adıyla son statik değişkene erişirken, java'da neden statik blok işlenmiyor?Java'da İşlenmemiş Statik Blok

class Foo { 
    public static final int BAR; 
    static { 
    System.out.println("Hello"); 
    } 
    } 
class Baz { 
    public static void quux() { 
    System.out.println(Foo.BAR); 
    } 
} 

cevap

11
Bazen olacak

- bu değişken aslında olup olmadığına bağlıdır birsabit:

Bir dize veya ilkel değişkeni (muhtemelen bir başka herhangi bir sınıf ya olmak zorunda
  • boş değer, ben
  • başlatma sentezleme sabit bir ifade
olmak zorunda) kontrol etmesi gerekir

Bu durumda, değişkene yapılan göndermeler etkin bir şekilde değere dönüştürülür. Yani bu kodda:

class Foo { 
    public static final int BAR = 5; 
} 

class Baz { 
    public static void quux() { 
     System.out.println(Foo.BAR); 
    } 
} 

Baz yöntem aynı kodunda bir:

public static void quux() { 
    System.out.println(5); 
} 

byte sol Foo.BAR hiçbir ipucu yok, bu nedenle Foo başlatılması gerekmez yöntem uygulandığında.

Bunun olmasını önlemek istiyorsanız, her zaman değişken başlatıcıda sabit bir ifadeyle başlatılmamış olursunuz. Örneğin:

class Foo { 
    public static final int BAR; 

    static { 
     BAR = 5; 
    } 
} 

class Baz { 
    public static void quux() { 
     System.out.println(Foo.BAR); 
    } 
} 

Foo.BAR kadarıyla derleyici söz konusu olduğunda sabit sayılmaz yapmak için yeterli olacaktır bu.