关于static的一些疑惑

七彩乱码 2012-05-08 05:14:37
今天老师上课讲的关于static的一些问题,还有些不懂,故来请教各位。
首先,老师举了个例子:
class Duck{
private int size;
public static void main(String[] args){
System.out.println("Size is"+getSize());
}
public int getSize(){
return size;
}
}
好了,老师说不能在静态方法中调用非静态成员变量,还说,成员变量是在堆中产生,由于没有new 一个实例变量,JVM找不到size到底是哪个…………开头我相信了。。
后面老师又讲到静态变量存储在静态存储区。我就在想,是不是调用静态方法时,编译器或者JVM只在静态存储区上找变量,所以才是上面的例子不能通过呢?
然后,我就有了如下举例(自己想的):
class Duck{
private int size;
public int getSize(){
return size;
}
}
class DuckTest{
Duck d=new Duck();
public static void main(String[] args){
System.out.println("Size is"+d.getSize());
}
}
这又有问题了,eclipse又报错了,d 要声明为static 。这时我已经new了一个对象d,JVM应该能找到是d的size了吧??可是为什么还是有错呢???是我哪里想错了??还是真的是像我说的一样,调用静态方法时,编译器或者JVM只在静态存储区上找变量,找不到静态变量所以才会报错呢??
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a395885670 2012-05-08
  • 打赏
  • 举报
回复
把Duck d=new Duck();放到main方法中去
夜郎king 2012-05-08
  • 打赏
  • 举报
回复
类的生命周期没有理解,建议楼主去看看java 编程思想,里面有些小例子,能避免很多误区,不过楼主敢于思考还是值得学习
ai逍遥 2012-05-08
  • 打赏
  • 举报
回复
补充一下图片
ai逍遥 2012-05-08
  • 打赏
  • 举报
回复

如上图,因为size是非静态的变量,他是存在于对象中的,当你new一个Duck的时候就会出现一个size,new几个就会出现几个,所以如果静态方法直接去调用getSize当然会找不到你该返回哪个size。除非你把size定义成静态的static,那样size就独立存在与static区,就和任何Duck没有关系了,就可以直接调用了。
ai逍遥 2012-05-08
  • 打赏
  • 举报
回复
你的main方法是静态的,你现在写的代码还是静态方法在调用非静态方法。把Duck d=new Duck();放到main方法中去定义就好了。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧