你们都知道在static方法中,不能访问类内非static成员变量和方法。但是缘由是什么呢? this
这首先要从static方法的特性提及。static方法,即类的静态成员常常被称为“成员变量”(class members),对于静态成员变量,咱们叫类属性(class attributes),对于静态成员方法,咱们叫类方法(class members)。其中静态成员变量:不管是否产生了对象或不管产生了多少对象的状况下,某些特定的数据在内存空间里只有一份。咱们能够直接使用类名来访问这个static变量,还能够在类的非静态的成员方法中像访问其余非静态成员变量同样去访问这个静态成员变量。对于静态方法,该方法没必要和对象绑在一块儿。访问方式有三种,类内:非静态成员方法能够直接访问静态成员方法,类外:类名.成员 对象.成员 对象
从以上咱们就能够知道,静态成员的最大特色是不用和对象绑定在一块儿。这个方便的特性,也成了它的一个包袱:当在静态成员的类外时,若是是直接用类名.静态成员的方式访问,静态成员直接访问了一个非静态的成员(该被访问成员通常是类内的,若是是类外的,可能就先建立对象了,由于不能直接访问,这里的直接访问与访问权限没有概念上的关系,访问权限是设定了访问的范围,直接访问则是一种访问方式)。这个时候就出现一个问题,非静态的成员是怎么访问的?若是能够直接访问,难道它也是能够脱离对象的吗?(静态成员的访问是脱离了对象的,而静态成员又直接访问了非静态成员)答案显然是否认的。因此在静态方法中不能够直接访问类内的非静态成员,若是要访问非静态成员,则要先建立对象。 内存
也许会有这样的疑问:既然是出在了非静态成员身上,那么可不能够用对象.static方法直接访问类内的成员?这个样子的实质仍是直接访问了非静态成员,并非说用了对象.static方法访问就能够改变静态方法访问类内成员的方式. class
简而言之:变量
1.Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,可是对象是在建立时才在内存中生成。而this指代的是当前的对象2.在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的状况. 3.并且,更为重要的是this和super都没法出如今static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者多是一个类,而不是对象.若是使用的是类来调用而不是对象,则 this就没法指向合适的对象.因此static 修饰的方法中不能使用this.因此甚至有人给static方法的定义就是:没有this的方法!虽然夸张,可是却充分说明this不能在static方法中使用!