2012-08-31 17 views
5
public class Main { 
    public static void main(String[] args){ 
     System.out.println(X.Y.Z); 
    } 
} 

class X { 
    static class Y { 
     static String Z = "Result 1"; 
    } 
    static C Y = new C(); 
} 

class C { 
    String Z = "Result 2"; 
} 

Bazen çıkış "Result 1" ve bazen çıkış "Result 2" olduğunu. Bana nedenini açıklayabilir misin?Farklı çıkış yürütme ana sınıfından sonra

JDK 1.6_33 kullanıyorum.

+0

JDK 1.6.24 ile, her seferinde "Sonuç 2" elde ediyorum. – mellamokb

+0

@mellamokb Ben de. Her zaman. –

+1

JDK 1.6.33'ü indirdim ve kod snippet'ini 20 kez çalıştırdım ve çalıştırdım. Her seferinde sonuç 2 var. – mellamokb

cevap

9

Bu Java Puzzler # 68'dir - her zaman Result 2 yazmalıdır. Alıntı:

bu şartlar altında programı davranışını yöneten bir kural var olduğu ortaya çıktı. Bir değişkeni ve bir türü aynı ada sahip olduğunda ve her ikisi de kapsamdayken, değişken adı önceliğini alır [JLS 6.5.2]. Değişken adın tip adını gizlediği söylenir [JLS 6.3.2]. Benzer şekilde, değişken ve tür adları paket adlarını gizleyebilir. Bu kural gerçekten belirsizdir ve ona bağlı olan herhangi bir programının okuyucularını karıştırması muhtemeldir.

+4

Ve buna dayanan bir kod yazan herkes katran ve tüylere yuvarlanmalıdır. – biziclop

+0

Bu Java bulmacalarını nerede görebilirim? Yanıt için – Ilya

+0

http://www.javapuzzlers.com/ – assylias

İlgili konular