黑马程序员技术交流社区
标题:
总结静态时想到的问题。
[打印本页]
作者:
HM周磊
时间:
2013-3-9 22:29
标题:
总结静态时想到的问题。
本帖最后由 HM周磊 于 2013-3-10 12:14 编辑
毕老师不是讲静态方法中不可以写this, super关键字吗。如果我一定要在静态方法中写this关键字呢。比如
class Person
{
String name;//成员变量,实例变量。
static String country = "CN";//静态的成员变量,类变量。
public static void show()
{
System.out.println("::::");
this.haha();
}
public static void haha()
{}
}
class StaticDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.show();
}
}
这样可以吗???
作者:
熊冠银
时间:
2013-3-9 22:45
类加载的时候,静态方法就随着加载了,这个时候还没有对象,this就不存在,好好看看视频,毕老师讲的很清楚
作者:
wodeairenw
时间:
2013-3-9 22:49
不行,看代码注释。
class Person
{
String name;//
static String country = "CN";
public static void show()
{
System.out.println("::::");
this.haha();//无法从静态方法中引用非静态。
}
public static void haha()
{}
}
class StaticDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.show();
}
}
作者:
移动小坦克
时间:
2013-3-9 23:00
如果那样编译不通过。。。。
不能加this的原因是,我们在用到类中内容的时候,类被加载进内存,比如通过类名调用静态函数,
或者创建对象。
类是在创建对象之前,加载进内存的,这时候不存在对象,所以静态函数中this就不知道该指向谁,
所以编译时期就会报错。。。。
作者:
夏晓彤
时间:
2013-3-9 23:00
静态方法在对象创建之前就会被加载到内存,this,super是个引用,哪个对象调用方法就引用哪个对象。 所有会出现一种现象,this的指向是不存在的对象,而静态方法有可能不是被对象调用的,this无从引用,上面代码 this.haha();肯定是错,
第一你要明白为什么明白
静态方法中不可以写this, super关键字,
第二,你就要记住它,这是规则,和篮球规则不一样吗?走步就是走步,既然都说:讲静态方法中不可以写this, super关键字,你还一定要在静态方法中写this关键字,那就是违法规则,编译就不让你通过
作者:
夏晓彤
时间:
2013-3-9 23:05
去厕所前都没人回复,回来刷新下都这么多人了
作者:
聂斌
时间:
2013-3-9 23:42
呵呵同学:
public static void show()
{
System.out.println("::::");
this.haha();
}
写上this.haha() 是会报错的,,this是代表对象,没有对象就没有任何代表,this这个引用他都没有被初始化过,他怎么能去调用内容呢,,,
此时没有对象,这个静态方法 show()要访问的是对象的.haha(),你连对象都没有,这个.haha()就没在内存中存在过,因为先来后到,静态先在了,那个非静态还没在,我当然不能访问你了
所以;静态方法只能访问静态成员(方法和变量)。
顺便说说静态成员的特点:
1.随着类的加载而加载
比如: Person类当被你使用到的时候, Person类就进内存了这个Person类一进内存的时候,这个静态的country 就已经存在了,就是说当我这个Person类一加载到内存当中,这个country = "CN" 这个值就已经在内存中开辟好了空间
也就是说:静态会随着类的消失而消失。说明它的生命周期最长。 Person类只要还在,这个"CN" 就一直在内存当中,类没了那么CN"就在内存中消失了
注意:当我这个Person类加载到内存当中的时候,country就已经在内存里了,name不在内存里,因为只有创建了对象以后,堆内存里才有name
2.优先于对象存在
明确一点:静态是先存在的。对象是后存在的。
3.被所有对象所共享
4.可以直接被类名调用
使用注意:
静态方法只能访问静态成员
静态方法中不可以写this,super关键字
作者:
amen0205
时间:
2013-3-10 06:00
都是人才啊 你自己运行下就知道行不行了
作者:
小路飞
时间:
2013-3-10 08:18
这个我之前也问过了,就是加载进内存的先后顺序的问题啦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2