堆栈溢出异常

    在学习的过程中,写的代码越多,遇到的错误和异常也会越多。所以写一个合集来记录平常遇到的问题,找出问题所在和解决办法。供以后参考。

    一:堆栈溢出异常 1


堆栈溢出异常_第1张图片
堆栈溢出异常

    编译时并没有错误,所以这个是非受检异常,也就是运行时异常。

个人理解:①把类实例化的方法私有化,外部不能调用,必须对外提供get()方法来调用,这也是单例模式中核心的步骤。

②但是在外部强行new一个对象,Java并不会提示错误,它发现自己调用构造方法时,创建不了对象,不停的new对象,也就是不停的从堆里划分内存空间,导致堆栈溢出。

解决办法:当不确定代码是否要用单例模式时,尽量避免私有化创建对象。


堆栈溢出异常_第2张图片
处理异常

这里正好整理一下创建的对象的方式

①调用构造方法。 new 类名()。

②Java反射。    .class

③调用类的clone()方法

④运用反序列化。 new ObjectInputStream(fis).readObject();//这里fis是文件输入流,读取对象时要强转成对应的数据类型。

不过第一种方式是最重要的,要着重理解,也就是类和对象的种种关系。其他都是花里胡哨的。

二:堆栈溢出 2


堆栈溢出异常_第3张图片
我要调调调

第一遍运行没报错误,一直运行,差点卡死。最后堆栈溢出,结束运行。

因为方法1运行结束后调用方法2,方法2运行结束后调用方法1.如此往复,无限循环。正所谓一而再,再而衰,三而竭。

解决办法:被调用的方法2里避免再调用方法1。

学过C语言的朋友跟我说C里没有方法,而JAVA里都是方法,一个一个封装,只要不停相互调用,不用考虑前一个方法结束。没错,只要方法不回去就行。

那天,我是遇到三种堆栈异常情况,第三种忘记了,有点可惜。

    这个专题每篇并不会写太多,着重收集。

    遇到没见过的异常,通常会百度,但网上形形色色,不能有效解决。一般会问身边的人,问别人问题通常有两种情况:

①问功能的逻辑该怎样实现

②问这段红红的,又长又硬的东西怎么干掉

所以感觉总结一下还是有必要的,碰到时不会太慌(冰岛1:1阿根廷。蒙牛广告:我是里奥梅西,现在慌得一批)

祝端午节快乐!

你可能感兴趣的:(堆栈溢出异常)