如果类中的构造方法是创建本类的对象,会栈内存溢出

今天用递归的时候,从递归的问题(方法调用自己本身可能会出现栈内存溢出),联想到如果一个对象创建自己本身,会不会也出现堆内存溢出
于是写了个小测试。

/**
 * 如果类中的构造方法是创建本类的对象,会堆内存溢出
 * java.lang.StackOverflowError
 *
 */
public class Test {
	
	private Test t;
	
	Test(){
		this.t = new Test();
	}
	
	public static void main(String[] args) {
		Test t = new Test();
	}
}

控制台输出异常确实是内存溢出,但是这和我一开始的想法不一样啊,怎么会是栈内存溢出呢。。。

Exception in thread "main" java.lang.StackOverflowError
	at practice.Test.<init>(Test.java:13)
	at practice.Test.<init>(Test.java:13)
	at practice.Test.<init>(Test.java:13)
	at practice.Test.<init>(Test.java:13)
	at practice.Test.<init>(Test.java:13)
	...

大概思考了下这个程序的执行流程:
1.main方法创建了一个Test类的对象,这个类的无参构造被执行
2.无参构造中又创建了一个Test对象,创建的时候又是执行了无参构造。
3.第二步一直无限的执行下去。。。
于是内存就溢出了。

话说。。。实际开发里面肯定不会有这种麻瓜的构造方法的。这个测试大概也没啥实际意义。

猜你喜欢

转载自blog.csdn.net/czx2018/article/details/84335223