????在學(xué)習(xí)的過程中,寫的代碼越多,遇到的錯(cuò)誤和異常也會(huì)越多。所以寫一個(gè)合集來記錄平常遇到的問題,找出問題所在和解決辦法。供以后參考。
????一:堆棧溢出異常 1

????編譯時(shí)并沒有錯(cuò)誤,所以這個(gè)是非受檢異常,也就是運(yùn)行時(shí)異常。
個(gè)人理解:①把類實(shí)例化的方法私有化,外部不能調(diào)用,必須對(duì)外提供get()方法來調(diào)用,這也是單例模式中核心的步驟。
②但是在外部強(qiáng)行new一個(gè)對(duì)象,Java并不會(huì)提示錯(cuò)誤,它發(fā)現(xiàn)自己調(diào)用構(gòu)造方法時(shí),創(chuàng)建不了對(duì)象,不停的new對(duì)象,也就是不停的從堆里劃分內(nèi)存空間,導(dǎo)致堆棧溢出。
解決辦法:當(dāng)不確定代碼是否要用單例模式時(shí),盡量避免私有化創(chuàng)建對(duì)象。

這里正好整理一下創(chuàng)建的對(duì)象的方式
①調(diào)用構(gòu)造方法。 new 類名()。
②Java反射。????.class
③調(diào)用類的clone()方法
④運(yùn)用反序列化。 new ObjectInputStream(fis).readObject();//這里fis是文件輸入流,讀取對(duì)象時(shí)要強(qiáng)轉(zhuǎn)成對(duì)應(yīng)的數(shù)據(jù)類型。
不過第一種方式是最重要的,要著重理解,也就是類和對(duì)象的種種關(guān)系。其他都是花里胡哨的。
二:堆棧溢出 2

第一遍運(yùn)行沒報(bào)錯(cuò)誤,一直運(yùn)行,差點(diǎn)卡死。最后堆棧溢出,結(jié)束運(yùn)行。
因?yàn)榉椒?運(yùn)行結(jié)束后調(diào)用方法2,方法2運(yùn)行結(jié)束后調(diào)用方法1.如此往復(fù),無限循環(huán)。正所謂一而再,再而衰,三而竭。
解決辦法:被調(diào)用的方法2里避免再調(diào)用方法1。
學(xué)過C語言的朋友跟我說C里沒有方法,而JAVA里都是方法,一個(gè)一個(gè)封裝,只要不停相互調(diào)用,不用考慮前一個(gè)方法結(jié)束。沒錯(cuò),只要方法不回去就行。
那天,我是遇到三種堆棧異常情況,第三種忘記了,有點(diǎn)可惜。
????這個(gè)專題每篇并不會(huì)寫太多,著重收集。
????遇到?jīng)]見過的異常,通常會(huì)百度,但網(wǎng)上形形色色,不能有效解決。一般會(huì)問身邊的人,問別人問題通常有兩種情況:
①問功能的邏輯該怎樣實(shí)現(xiàn)
②問這段紅紅的,又長(zhǎng)又硬的東西怎么干掉
所以感覺總結(jié)一下還是有必要的,碰到時(shí)不會(huì)太慌(冰島1:1阿根廷。蒙牛廣告:我是里奧梅西,現(xiàn)在慌得一批)
祝端午節(jié)快樂!