报错空指针异常_让你为之颤抖的Java常见的异常exception
對于一名Java程序員來說,exception再常見不過了。工作時,一天不見便渾身難受。當然了,如果辛辛苦苦敲了一天的代碼,就要下班了,信心滿滿,代碼跑完收工。這個時候控制臺告訴你:.....................Exception..............,嘻嘻嘻。 本皮不才,特意留心了一些常見的異常,總結一下,跟大家嘮嘮。
1、NullPointerException
它叫空指針異常,基本上操作一個 為空的對象的方法或屬性時會拋出這個異常。當一個變量的值為 null 時,在 Java 不會給它分配內存,null 也是對象成員變量的默認值。所以,一個對象如果沒有進行初始化操作,這時候,如果你調用這個對象的方法或者變量,就會出現空指針異常。阿里云開發手冊中有這樣的說法:Java 類庫中定義的一類 RuntimeException 可以通過預先檢查進行規避,而不應通過 catch 來處理,比如:IndexOutOfBoundsException,NullPointerException 等等。也就是說,這種異常是可以避免在處理可能存在空指針異常等異常情況時,可以不通過catch,而是邏輯代碼編寫者通過判斷來規避。另外,斷言也是可以用來檢查程序的安全性的,在使用之前進行檢查條件,如果不符合條件就報異常,符合就繼續。
2、IOException
IO異常。IO,即:input, output,java內部數據的傳輸都是通過流,或者byte來進行傳遞的。通常我們在讀寫磁盤文件、網絡內容的時候會發生的一種異常,這種異常是受檢查異常,需要進行手工捕獲。要處理這些異常,有兩種處理方法:要么直接try-catch,要么使用throws拋出可能發生的異常。類庫的程序員編寫方法時使用了throws拋出了可能產生的異常,將具體的處理方法交給了你,因為你此時調用了這個方法,但你此時不想處理可以繼續拋出,拋出后到其它調用此方法的地方去捕獲,如果后面你仍然沒有處理,那么最終將交給系統處理。
3、ClassCastException
類轉換異常,將一個不是該類的實例轉換成這個類就會拋出這個異常。經常這兩種原因:1.一個類是數字類,而由于誤操作,錯誤的將數字類向數字類轉換改寫成了數字類向字符串類的轉換,從而產生了異常。2.大部分原因是因為強制轉換或者是SQL映射時發生了這個異常。這是運行時異常,不需要手工捕獲。
如下,將一個數字強制轉換成字符串就會報這個異常:
Object object = new Integer(0);
String string = (String)object;
4、SQLException
SQL異常,通常發生在操作數據庫時的異常。上到數據庫連接,下到sql語句錯誤或者數據庫表中的變量和實體類映射不符(尤其是數據類型)等情況,只有想不到沒有錯不到。然鵝,仔細閱讀 SQLException 的異常信息,會幫助我們更好的定位錯誤。
5、IndexOutOfBoundsException
索引越界異常,當操作一個字符串或者數組的時候經常遇到的異常。同屬于RunTimeException,它常見的形式有StringIndexOutOfBoundsException和ArrayIndexOutOfBoundsException,即字符串長度越界和數組越界,通俗說就是我寫的代碼以為我的字符串或數組有那么長,還用了相應的操作,但他其實沒那么長。它是運行時異常,不需要手工捕獲。
6、ClassNotFoundException
類找不到異常,這是在加載類的時候拋出來的,即在類路徑下不能加載指定的類。你看這個類它又大又圓,就像這個異常它......
它是受檢查異常,需要進行手工捕獲。
7、OutOfMemoryError
內存異常,這一般不是程序能控制的,是指要分配的對象的內存超出了當前最大的堆內存,需要調整堆內存大小(-Xmx)以及優化程序。當然,需要重點排查以下幾點:
檢查代碼中是否有死循環或遞歸調用。檢查是否有大循環重復產生新對象實體。檢查對數據庫查詢中,是否有一次獲得全部數據的查詢。一般來說,如果一次取十萬條記錄到內存,就可能引起內存溢出。這個問題比較隱蔽,在上線前,數據庫中數據較少,不容易出問題,上線后,數據庫中數據多了,一次查詢就有可能引起內存溢出。因此對于數據庫查詢盡量采用分頁的方式查詢。(吃過這種虧的不想多說)檢查List、MAP等集合對象是否有使用完后,未清除的問題。List、Map等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。
8、FileNotFoundException
文件找不到異常,如果文件不存在就會拋出這種異常。如定義輸入輸出文件流,文件不存在會報錯。FileNotFoundException 其實是 IOException 的子類,同樣是受檢查異常,需要進行手工捕獲。
我自己是一名從事了多年開發的JAVA老程序員,今年年初我花了一個月整理了一份最適合2019年學習的java學習干貨,可以送給每一位喜歡java的小伙伴,想要獲取的可以關注我的頭條號并在后臺私信我:java,即可免費獲取。
本文轉載至知乎——一只咩,如有侵權請聯系立刪!
總結
以上是生活随笔為你收集整理的报错空指针异常_让你为之颤抖的Java常见的异常exception的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微博 用户画像_“肖战”被抵制?Pyth
- 下一篇: java分治_【Java算法】什么是分治