我就根据视频中毕老师的讲解简单的解释一下:
class Person{
String name;
Static String country="cn";
public void show(){
System.out.println("name="+name);
}
public class PersonDemo{
public static void main(String[] args){
Person p= new Person();
}
}
}
/*实例是由用户根据自己或者其他要求创建的。比如,这里建立一个Person对象或者可以说新建某个人出来。
静态方法中不能使用this的原因。
当实例化对象时,类会对成员变量首先进行默认初始化,接着进行显示初始化(即原有赋初值的显示)。
在某些函数中会对成员变量再次赋值,如果使用了static修饰后根据其优先性,被static修饰的函数先对
某些变量进行了赋值,然后才是对象实例化的显示。(相当于覆盖了自己想要的赋值)
*/
当你创建了Person对象并且调用了setName方法,
Person p = new Person();
p.setName("张三");
这时的this就相当于p,指向的是同一个对象。
2,静态方法存储在方法区中,而对象是存储在栈内存中,当对象还没有创建的时候
静态方法已经存在了,这时候this引用的对象还不存在,所以会报错
楼主,首先你要明白的是:this是依赖于对象的,没有对象就用不到this。
给你举个简单的例子:假如你是男人,并且没有儿子,这样你就不能跟别人说:我儿子怎么怎么的,你不能用我儿子这个词,因为你确实没有儿子;可是当你有儿子了,你就可以跟别人自豪的说:我儿子怎么怎么优秀啊帅气啊等等。其中,“儿子”就是相当于对象,“我儿子”就相当于this,也就是代表儿子这个对象。
实例是new创建出来的,如Person p = new person();这样就创建了person类的一个实例。至于怎么生儿子?呵呵 你懂的。。。
静态方法中不能有this是因为静态方法可以不通过对象直接用类来调用,就是一个类没有对象也可以使用静态方法,但是this是必须存在对象才能用的。所以静态方法中不能用到this,有就矛盾了。