黑马程序员技术交流社区
标题:
主函数和静态方法的问题
[打印本页]
作者:
何超
时间:
2013-11-28 00:17
标题:
主函数和静态方法的问题
import java.util.Arrays;
class D
{
D d=new D();
public int a=0;
public void get(){};
public static void show(int b){
d.a=b; //这个方法报错
};
public static void main(String[] args)
{ //主函数方法都是对的
D d=new D();
show(1);
d.a=1;
d.get();
}
}
复制代码
主函数也是静态为什么可以调用 d.a 而show()却不能?
作者:
容嬷嬷当年也是
时间:
2013-11-28 00:47
把类改成静态的就可以了。
作者:
帅气的冬瓜
时间:
2013-11-28 10:45
import java.util.Arrays;
//你这个代码问题太多了
class D
{
D d=new D(); //有必要创建自己的对像吗
public int a=0;
public void get(){};
public static void show(int b){
d.a=b; //这个方法报错 //属性直接赋值就可以了 a=b;
};
public static void main(String[] args)
{ //主函数方法都是对的
D d=new D(); //创建对象干嘛
show(1);
d.a=1; //直接赋值 a=1;
d.get(); //直接调用不就行了 get();
}
}
作者:
王贺
时间:
2013-11-28 12:55
先不考虑楼主这段程序有哪些不合理,先解决这个错误再说:
public static void show(int b){
d.a=b; //这个方法报错
}
楼主这个地方有错,可以看下这个错误的原因:
Cannot make a static reference to the non-static field d
一个静态的不能赋给一个非静态的,所以只要把D d变成,static D d就成了
希望帮到你
作者:
冯晓骏
时间:
2013-11-28 22:33
你应该这么想,一个静态方法是不可以调用自己类中的非静态成员的,这个所谓的不能调用,是当你用类名调用这个静态方法时,是没有实例对象的,而非静态成员调用时,前面默认省略了this,所以这个this就无从说起了,所以不能调用,但是这里调用的非静态的方法是通过一个存在的对象调用的,而不是this,那么就是成立的
作者:
刘敏
时间:
2013-11-29 00:18
本帖最后由 刘敏 于 2013-11-29 00:21 编辑
主函数虽然静态,但他通过new对象,然后对象.a调用,但 直接用show()的时候,是没有建立对象的。
static D d=new D(); //把他设置为静态,这样虚拟机在加载class时就会创建一个对象,你就可以 在show()中使用 d.a了
public int a=0;
public void get(){};
作者:
Sinoku
时间:
2013-11-29 09:20
主函数是静态不错,但是他之前已经new了一个D对象,所以当然可以调用show()了啊,而在D类中,当加载静态函数中,是没用D的对象的,所以当然报错了啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2