我们在学到静态的时候,毕老师曾说:静态方法只能访问静态成员。
但是,为什么我在创建静态方法的时候可以访问到非静态成员方法呢?如下代码:
class Person {
public static void method() {
new Person().run();
}
public void run() {
}
}
作者: luguoyuanf 时间: 2013-4-4 22:43
静态方法时不能访问非静态的,原因是静态方法随着类的加载进入方法区的静态区,而非静态方法要在被new创建对象后进入到对内存中.所以静态只能访问静态,非静态可以访问静态.静态优先于非静态.作者: 刘印12 时间: 2013-4-4 22:46
首先你创建了Person对象 而你的非静态方法定义在了person对象内 当然能访问了
如果你按一下方法调用就不行了
class Person{
public static void method(){
run();//错误
}
public void run(){}
}作者: arthur 时间: 2013-4-4 22:47
这个应该是在静态方法里new了一个非静态对象,再用这个对象调用非静态方法作者: 伊廷文 时间: 2013-4-4 22:50
因为run()方法属于person类的一个方法, new Person().run();等同于
person p=new Person();p.run();在这新建了一个对象实例就是p,用p调用run方法作者: 范鹏飞 时间: 2013-4-4 23:01
静态方法只能访问静态方法,不能访问非静态方法。new Person().run();相当于创建了一个Person类的对象,通过对象调用的run()方法。作者: 王川 时间: 2013-4-4 23:16