java中类的方法池中都有一个隐含的参数this,他表示本对象的引用,但是static方法是没有这个隐含参数的,因为static方法和类的实例无关,它只在类装载的时候初始化,很多书都把静态变量称作类级变量。
this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,因此方法内不能引用 this。
(1) 非静态方法参数传递时,有一个隐式参数this,这个this就是调用该方法的对象本身。
比如, Object o=new Object();
o.toString(); //实际上是有参数传递的toString(Object this),且o==this
这样在非静态方法中就可以通过this来得到调用对象的其他域和方法,私有域的也行。
(2) 静态方法是属于类的,而并不属于某个对象。所以没有隐式参数this,自然也就不能通过this调用对象本身了。
但这并不意味这不能调用非静态域。我们可以通过显示参数传递来做到这一点:
static叫静态方法,也叫类方法,就是在程序启动的时候,就会为这个方法分配一块内存空间,所以什么时候都可以调用这个方法。
没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的。
所以,静态方法里不能调用非静态方法,除非你先实例化那个类。
jvm有类加载器,第一次加载类时执行类中的static域,jvm会专门划分一个内存区域给static程序块,可以成为静态区。属于这个类。
this指针是指向类的对象,在实例化对象时jvm会在堆区分配内存给一个具体的对象,this指针指向这个对象。而类中的static域始终是在静态区分配内存,this指向堆区,所以不能调用。
static是属于类的。this是对象指针。