关于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只在静态存储区上找变量,找不到静态变量所以才会报错呢??