Java的異常類型總結(jié)
Java的設(shè)計目的是讓程序員有機會設(shè)計一個沒有錯誤的應(yīng)用程序。當(dāng)應(yīng)用程序與資源或用戶交互時,程序員可能會知道一些異常,這些異常是可以處理的。不幸的是,也有程序員無法控制或簡單忽略的例外情況。簡而言之,并不是所有的異常都是相同的,因此程序員需要考慮幾種類型。
異常是導(dǎo)致程序無法在其預(yù)期的執(zhí)行中運行的事件。異常有三種類型——檢查異常、錯誤和運行時異常。
The Checked Exception(檢查異常)
已檢查異常是Java應(yīng)用程序應(yīng)該能夠處理的異常。例如,如果應(yīng)用程序從文件中讀取數(shù)據(jù),它應(yīng)該能夠處理FileNotFoundException。畢竟,無法保證預(yù)期的文件會出現(xiàn)在它應(yīng)該出現(xiàn)的位置。文件系統(tǒng)上可能發(fā)生任何事情,應(yīng)用程序?qū)Υ艘粺o所知。
讓我們進一步看看這個例子。假設(shè)我們使用FileReader類來讀取字符文件。如果你看一看Java api中的FileReader構(gòu)造函數(shù)定義,你會發(fā)現(xiàn)它的方法簽名:
public FileReader(String fileName) throws FileNotFoundException
如您所見,構(gòu)造函數(shù)明確聲明FileReader構(gòu)造函數(shù)可以拋出FileNotFoundException。這是有意義的,因為文件名字符串很可能會不時出錯。請看下面的代碼:
public static void main(String[] args){ FileReader fileInput = null; //打開輸入文件 fileInput = new FileReader("Untitled.txt"); }
從語法上來說,這些語句是正確的,但是這些代碼永遠不會編譯。編譯器知道FileReader構(gòu)造函數(shù)可以拋出FileNotFoundException,而處理此異常則取決于調(diào)用代碼。有兩個選擇-首先,我們可以通過指定一個throw子句來傳遞異常:
public static void main(String[] args) throws FileNotFoundException{ FileReader fileInput = null; //打開輸入文件 fileInput = new FileReader("Untitled.txt"); }
或者我們可以處理例外情況:
public static void main(String[] args){ FileReader fileInput = null; try { //打開輸入文件 fileInput = new FileReader("Untitled.txt"); } catch(FileNotFoundException ex) { //告訴用戶去找文件 } }
編寫良好的Java應(yīng)用程序應(yīng)該能夠處理檢查過的異常。
Errors(錯誤)
第二種異常稱為錯誤。當(dāng)異常發(fā)生時,JVM將創(chuàng)建一個異常對象。這些對象都派生自可拋出類。可拋出類有兩個主要子類——錯誤和異常。Error類表示應(yīng)用程序不太可能處理的異常。
這些例外被認為是罕見的。例如,JVM可能會因為硬件無法處理它必須處理的所有進程而耗盡資源。應(yīng)用程序可以捕獲錯誤并通知用戶,但通常應(yīng)用程序必須關(guān)閉,直到底層問題得到處理。
Runtime Exceptions(運行時異常)
發(fā)生運行時異常僅僅是因為程序員犯了錯誤。你已經(jīng)寫好了代碼,編譯器會覺得一切都很好當(dāng)你運行代碼時,它會崩潰,因為它試圖訪問一個不存在的數(shù)組元素或者一個邏輯錯誤導(dǎo)致一個方法被調(diào)用為空值?;蛘叱绦騿T可能犯的任何數(shù)量的錯誤。但是沒關(guān)系,我們通過詳盡的測試來發(fā)現(xiàn)這些異常,對吧?
錯誤和運行時異常屬于未檢查異常的類別。
相關(guān)文章
IDEA 2020.1打開時閃退的問題及解決方法(完美解決方法)
這篇文章主要介紹了IDEA 2020.1打開時閃退問題及解決方法,本文給大家分享我的處理方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Java使用easyExcel導(dǎo)出數(shù)據(jù)及單元格多張圖片
除了平時簡單的數(shù)據(jù)導(dǎo)出需求外,我們也經(jīng)常會遇到一些有固定格式或者模板要求的數(shù)據(jù)導(dǎo)出,下面這篇文章主要給大家介紹了關(guān)于Java使用easyExcel導(dǎo)出數(shù)據(jù)及單元格多張圖片的相關(guān)資料,需要的朋友可以參考下2023-05-05Java實現(xiàn)通過IP獲取IP歸屬地的方法(離線+在線)
我們都知道安全攻擊都是在某臺客戶機上執(zhí)行某些惡意操作致使服務(wù)端響應(yīng)異常崩潰亦或響應(yīng)數(shù)據(jù)被篡改,首先我想到的是對訪問的web端做一個IP的校驗,那么我們首先得知道客戶端的IP是多少,接下來此文重點介紹如何獲得,需要的朋友可以參考下2023-10-10java基于jedisLock—redis分布式鎖實現(xiàn)示例代碼
這篇文章主要介紹了jedisLock—redis分布式鎖實現(xiàn)示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11SpringBoot 插件化開發(fā)模式詳細總結(jié)
插件化開發(fā)模式正在很多編程語言或技術(shù)框架中得以廣泛的應(yīng)用實踐,大大提升了系統(tǒng)的擴展性和伸縮性,也拓展了系統(tǒng)整體的使用價值,那么為什么要使用插件呢,本文就詳細介紹SpringBoot 插件化開發(fā)模式,感興趣的同學(xué)可以參考下2023-06-06