2017-04-06 34 views
-2

我是一名java初學者,我試圖從我購買學習java的書中瞭解static的概念。但是,由於我在節目中的實驗,我感到非常困惑。這本書說,靜態無法引用這個關鍵字,這是好的,直到我開始使用普通函數而不是靜態。在這裏,我可以用this關鍵字訪問靜態變量! (見displayMobileSpecs功能在下面的代碼)爲什麼我能夠在java中使用這個關鍵字與靜態變量

import java.util.Random; 

class Static { 
    public static void main(String[] com){ 

     System.out.println("By default the mobile is having " 
          + Mobile.RAM + "gigabytes of RAM and" 
          + Mobile.CameraMP + " mega pixels of camera"); 

     Mobile S4mini = new Mobile("S4 Mini" , 4 , 16); 
     S4mini.displayMobileSpecs(true); 

     Mobile mob2 = new Mobile("fdf" , 23 , 45); 
     mob2.displayMobileSpecs(true); 
     S4mini.displayMobileSpecs(false); 
    } 
} 

class Mobile{ 

    static int RAM; 
    static int CameraMP; 
    Random rand = new Random(); 

    double InternalMemorySpace; 
    double ExternalMemorySpace; 

    String modelNo; 

    Mobile(String modelName,double internalMem , double externalMem) 
    { 
     this.modelNo = modelName; 
     this.InternalMemorySpace = internalMem; 
     this.ExternalMemorySpace = externalMem; 
    } 

    static { 
     RAM = 4; 
     CameraMP = 12; 

     System.out.println("The Static part of the class is executed"); 
    } 

    void displayMobileSpecs(boolean change){ 

     if(change) 
     this.RAM = (int) rand.nextInt(8) + 2; 

     System.out.println(this.RAM + " , " + Mobile.RAM); 
    } 
} 

因此,它是靜態的變量可以用此進行訪問,但不能在靜態函數還是什麼?我真的很困惑,這是一個非常愚蠢的問題,因爲我看到了,但請回答我。

(注:順便說一下,請不要介意在節目中使用的移動的荒謬的例子謝謝:))

回答

2

靜態變量可以用此進行訪問,但不能在靜態 功能

在靜態塊或靜態方法中,沒有實例可以引用,因此不允許使用「this」關鍵字。

爲什麼我能夠使用靜態變量此關鍵字在java中

但你可以參考「本」在非靜態方法也可以使用參考用「這個」關鍵詞在靜態變量非靜態方法。這裏的「this」指向當前對象。

+0

你可以通過像this這樣的實例引用來引用一個靜態成員,但是你不應該這樣做。 –

+1

我同意.....但我的答案僅限於OP的問題,你正在採取它的dos和donts。感謝您的補充。 – mhasan

相關問題