关于栈内存溢出的一个问题

这两天在学习java泛型(博主参考的是疯狂java讲义,真的是一本不错的java学习参考书哦)的时候无意中看到一个栈内存溢出的例子,先将自己的学习笔记写下来,希望刚入门的朋友能有所收货,高手请主动跳过。

class StrList
{
	private List strList = new ArrayList();
	public boolean add(String ele)
	{
		return strList.add(ele);//1:return add(ele);
	}
	// 重写get方法,将get方法的返回值类型改为String类型
	public String get(int index)
	{
		return (String)strList.get(index);//2:return get(index);
	}
	public int size()
	{
		return strList.size();//3:return size();
	}
}
public class CheckType
{
	public static void main(String[] args) 
	{
		// 创建一个只想保存字符串的List集合
		StrList strList = new StrList();
		strList.add("疯狂Java讲义");
		strList.add("疯狂Android讲义");
		strList.add("轻量级Java EE企业应用实战");
		// 下面语句不能把Integer对象“丢进”集合中,将引起编译错误
		//strList.add(5);     // ①
		System.out.println(strList);
		for (int i = 0; i < strList.size() ; i++ )
		{
			// 因为StrList里元素的类型就是String类型,
			// 所以无须强制类型转换
			String str = strList.get(i);
		}
	}
}

可以发现,当改成代码中1,2,3处的任意一处的语句的时候,编译不会出错,但是运行时会提示 Exception in thread "main" java.lang.StackOverflowError说明发生了栈内存溢出问题。通过自己查阅资料跟经验发现,不加strList以限制内存大小当然会导致内存溢出,这个问题想必大部分编程爱好者都能理解,博主在这有点多此一举了 大笑,既然到了河边哪有不湿鞋,那就再来一波毒奶:这些代码其实本意是想判断 ①处的类型是否在编译的时候能检查出来,这样做当然是可以的,但是代码太过庞大,所以如果改成泛型就更好了,更多资料可以参考李阳的疯狂Java讲义哦!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值