本帖最后由 怀念黑海岸 于 2014-8-4 11:56 编辑
我查到相关资料了,现在来补充下:
第一个问题:main方法作为执行代码他是会随着类的class文件加载到内存中方法区中的代码区中的,而你main方法定义的各种变量则是存在于为main方法开辟的栈中的,你在main方法中建立一个对象引用s,这个s也是存在于main方法的栈中的。
第二个问题:Student中定义的非静态的变量他们是属于对象空间的,而他们则是定义在调用当前这个对象的线程私有的栈区间内,你在这个对象中定义的各种变量,和这个对象涉及到所操作的方法中定义的局部变量等等,都是存放在这个线程私有空间内
第三个问题:你声明的那个静态变量student s,当类文件加载到内存时它被初始化(即加载类文件时就完成new Student()步骤)。记好:java中凡是通过new关键字产生的对象。不管是静态的还是非静态的,共有的还是私有的,都是存在于堆空间中的。你getInstance方法是将这个静态变量的地址赋值给了主函数中定义的s,
第四个问题:因为单例中的构造函数是被私有的,我们在程序开始运行时是无法创建这个类的对象的,除非在这个类的内部使用(但是频繁的创建对象就是去了单例模式的特点了)。而且构造函数是不能用static修饰的。
|