在static方法中为什么不能使用this引用

原创 2016年06月01日 10:35:00
  public class TestStatic {
      static int a = 1;
      public static void main(String args[]) {
>>    ¦   System.out.println(this.a);                                                                                  
      }   
  }
//运行报错
java:12: error: non-static variable this cannot be referenced from a static context
//非静态变量不能引用静态的上下文

这是每一个java初学者都会遇到的问题,我一直想不明白为什么会报错,今天突然想明白了,但也不是原理层面的明白,从逻辑角度分析吧。
static方法是直接可以调用的,看如下代码:

public class TestStatic {
    private static int a = 1;
    public static void main(String args[]) {
        //调用TestStatic的静态方法test()
       TestStatic.test();
    }
    static public void test() {
       System.out.println(a);                                                                                         
    }
}

而this 对象,它可以在类里面来引用这个类本身的属性和方法,说白了就是this是对象new出来后才会存在的,而static方法是不需要new出来直接可以调用的。所以在调用static方法并不能保证this已经存在,自然会报错!所以在static方法中只能引用static的变量和方法。

版权声明:本文为博主原创文章,如果你觉得有用,我很开心!

相关文章推荐

java中为什么在static中不能使用this关键字

Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。而this指代的是当前的对象 在方法中定义使用的this关键字,...

this和static的用法

this: this是一个系统隐含的指针,被自动附加在非静态成员函数参数列表中   this出现在构造函数里(静态函数内部,没有this指针),代表当前时刻正在创建的对象;this出现在普通函数...

private static与public static的用法及区别(Java)

其实,理解这两者的区别并不难,因为(public、private)和static这两种修饰符的作用本就不同,所以要理解两个的区别,其实就是这两种修饰符效果累加起来之后的区别。 static:静态修饰符...

java中静态方法中为什么不能使用this、super和直接调用非静态方法

这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆...

关于static,this,对象的关系

对于属性修饰符,它可以是public,protected.private.static,final,其中public.protected.private三个最多只能出现一个,可以与static.fin...

static方法中不能调用非静态方法(easy)

若写代码如下: public static void main(String[] args){ } void test(){ }

为什么静态成员、静态方法中不能用this和super关键字

为什么静态成员、静态方法中不能用this和super关键字 1.     在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这...

深入this关键字(静态方法中不能调用非静态成员的解释)

在本文的开头,非常感谢Thining in JAVA这本书给我的启发,大师就是大师,正是因为有了你们这些大师对基础的极致追求,我们这些菜鸟才少走了很多弯路,BY THE WAY: 陈昊鹏翻译的那个有...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在static方法中为什么不能使用this引用
举报原因:
原因补充:

(最多只允许输入30个字)