class Soup {
private Soup(){}
private static Soup ps1 = new Soup(); public static void main(String[] args) {
Soup sp = new Soup();
}
}当属性成员ps1 为static 的时候,可以创建他的对象。上面这个正常。class Soup {
private Soup(){}
private Soup ps1 = new Soup(); public static void main(String[] args) {
Soup sp = new Soup();
}
}当ps1 为普通成员时,上面这个就会错误。请问为啥子能在一个类里面创建自己的对象(如ps1)?
谁能给点详细解释,非常感谢!!!
private Soup(){}
private static Soup ps1 = new Soup(); public static void main(String[] args) {
Soup sp = new Soup();
}
}当属性成员ps1 为static 的时候,可以创建他的对象。上面这个正常。class Soup {
private Soup(){}
private Soup ps1 = new Soup(); public static void main(String[] args) {
Soup sp = new Soup();
}
}当ps1 为普通成员时,上面这个就会错误。请问为啥子能在一个类里面创建自己的对象(如ps1)?
谁能给点详细解释,非常感谢!!!
当ps1 为普通成员时,在内存堆区有多个Soup的对象,引发内存堆区溢出错误!
"Exception in thread "main" java.lang.StackOverflowError!"
static Soup ps1 = new Soup();就不在new对象的时候执行而Soup ps1 = new Soup();每次new对象都会执行,然后就是不停的new对象,不停的执行......
Soup ps1只是一个引用,仅仅是存放地址,空间大小固定
学习!
你说“Soup ps1只是一个引用,仅仅是存放地址,空间大小固定”,这个我理解。
但是new Soup()这个对象应该是要占空间的,怎么知道他的大小呢?
执行的时候分配空间
对象属性只需要分配一个存放引用的空间实在想不通,就看作private Object ps1;
你是想说static的对象,只在那个.class文件第一次加载的时候才执行,对吧??????
虽然ps1 是一个引用,但是第一次加载Soup.class的时候,ps1 这个引用总应该指向一个“实在的Soup对象”吧?我的意思就是这个“实在的Soup对象”如何确定大小?
第一次加载Soup.class的时候是怎么确定ps1 这个引用指向的确切Soup对象的?因为Soup.class只加载一次,所以以后就不会为ps1 引用重新赋与新的Soup对象了。
` ``` 只new了一次但下面那个 变成了普通成员
但主函数new了一次后 产生了一个实例, 就要加载一次普通成员
当加载普通成员的时候 要 执行一次Soup ps1 = new Soup(); 又new 一次 又要加在加载一次哦普通成员如此 就想当于死循环了 ```
递归创建````