在学习的过程中,写的代码越多,遇到的错误和异常也会越多。所以写一个合集来记录平常遇到的问题,找出问题所在和解决办法。供以后参考。
一:堆栈溢出异常 1
编译时并没有错误,所以这个是非受检异常,也就是运行时异常。
个人理解:①把类实例化的方法私有化,外部不能调用,必须对外提供get()方法来调用,这也是单例模式中核心的步骤。
②但是在外部强行new一个对象,Java并不会提示错误,它发现自己调用构造方法时,创建不了对象,不停的new对象,也就是不停的从堆里划分内存空间,导致堆栈溢出。
解决办法:当不确定代码是否要用单例模式时,尽量避免私有化创建对象。
这里正好整理一下创建的对象的方式
①调用构造方法。 new 类名()。
②Java反射。 .class
③调用类的clone()方法
④运用反序列化。 new ObjectInputStream(fis).readObject();//这里fis是文件输入流,读取对象时要强转成对应的数据类型。
不过第一种方式是最重要的,要着重理解,也就是类和对象的种种关系。其他都是花里胡哨的。
二:堆栈溢出 2
第一遍运行没报错误,一直运行,差点卡死。最后堆栈溢出,结束运行。
因为方法1运行结束后调用方法2,方法2运行结束后调用方法1.如此往复,无限循环。正所谓一而再,再而衰,三而竭。
解决办法:被调用的方法2里避免再调用方法1。
学过C语言的朋友跟我说C里没有方法,而JAVA里都是方法,一个一个封装,只要不停相互调用,不用考虑前一个方法结束。没错,只要方法不回去就行。
那天,我是遇到三种堆栈异常情况,第三种忘记了,有点可惜。
这个专题每篇并不会写太多,着重收集。
遇到没见过的异常,通常会百度,但网上形形色色,不能有效解决。一般会问身边的人,问别人问题通常有两种情况:
①问功能的逻辑该怎样实现
②问这段红红的,又长又硬的东西怎么干掉
所以感觉总结一下还是有必要的,碰到时不会太慌(冰岛1:1阿根廷。蒙牛广告:我是里奥梅西,现在慌得一批)
祝端午节快乐!