关于static的一些疑惑
今天老师上课讲的关于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只在静态存储区上找变量,找不到静态变量所以才会报错呢??
首先,老师举了个例子:
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只在静态存储区上找变量,找不到静态变量所以才会报错呢??
...全文
相关推荐
JAVA 解惑(解析JAVA开发中的95个疑惑点)
### JAVA 解惑(解析JAVA开发中的95个疑惑点)#### 知识点一:取余操作符在处理负数时的行为**标题**: 奇数性**描述**: 本节通过一个示例解释了Java中取余操作符(`%`)在处理负数时的行为特点
java疑惑-java迷题
### Java疑惑-java迷题解析#### 谜题1:奇数性判断**题目描述:**本题探讨了一个常见的编程任务—判断一个整数是否为奇数。给出的示例代码片段提供了一种实现方法,但存在逻辑缺陷。
Thread线程的基础知识及常见疑惑点总结
本文将探讨Thread线程的基础知识及其常见的疑惑点。首先,我们需要了解线程的状态。Java定义了五种线程状态:1. 创建(new):线程刚刚被实例化,尚未启动。2.
详解static 和 final 和 static final区别
Static、Final 和 Static Final 的区别 Static、Final 和 Static Final 是 Java 中三个重要的关键字,它们之间的区别和应用场景是开发者需要了解和掌握的
浅谈Java中static和非static的区别
Java中static和非static的区别static和非static是Java中两个非常重要的概念,它们之间的区别是Java开发中一个非常重要的知识点。


Java SE
