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

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

/**
 * 如果类中的构造方法是创建本类的对象,会堆内存溢出
 * 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.第二步一直无限的执行下去。。。
于是内存就溢出了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值