2017-04-06 19 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

相关问题