2015-01-14 17 views
7

代碼:如何對接口的空引用返回值?

interface I { 
    int i = 0; 
    void display(); 
} 

class A implements I { 
    I i1; 

    public static void main(String[] args) { 
     A a = new A(); 
     a.display(); 
    } 

    public void display() { 
     System.out.println(i1); //1 
     System.out.println(i1.i); //2 
    } 
} 

代碼的輸出是

null 
0 

但當i的地址是null,然後在第二i1.i它是如何返回一個值? 如何使用空引用來指向變量?

+2

相關:http://stackoverflow.com/questions/11579953/static-fields-on-a-null-reference-in-java – assylias

回答

20

Fields declared in interfaces are implicitly static.

在接口的身體的每個字段聲明隱含publicstatic,和final。允許冗餘地爲這些字段指定任何或所有這些修飾符。

i1.i 

static字段訪問表達。它依賴於i1的類型,而不是其值。這是完全等同於

I.i // where I is the name of your interface 
+5

這就是爲什麼它不是一個即使Java允許你這樣做,也可以通過實例訪問靜態字段。 – biziclop

+0

「在接口中聲明的字段是隱式靜態的」並且是最終的。 – dragon66

+0

我相信當你這樣做時,Eclipse甚至會發出警告,這通常是一個不好的習慣(儘管有時候它是可取的) – MightyPork