2016-11-27 94 views
4

這是示例代碼,我有:Java中的枚舉類型實例變量的默認值是什麼?

enum A { 
    A, 
} 

class TestA { 
    A a; 
    public static void main(String[] args) { 
     final TestA testA = new TestA(); 
     System.out.println(testA.a); 
     System.out.println(testA.a.A); 
    } 
} 

,它將打印:

null 
A 

如果一個未初始化的實例枚舉變量爲null,如何訪問一個枚舉工作的一個實例的默認值?

回答

7

A.A是一個靜態變量。使用引用該類實例的變量訪問類的靜態變量(即使它爲空)是一個糟糕的主意,但獲得授權。這不限於枚舉:

Integer i = null; 
System.out.println(i.MAX_VALUE); 

運行良好。但它應該寫成

System.out.println(Integer.MAX_VALUE); 
4

枚舉常量本質上是靜態成員,因此它們服從與靜態成員完全相同的規則。

它的工作原因正是((System) null).out不會導致NPE的原因,因爲它變成了一個靜態成員訪問,它不以任何方式使用null