java異常體系以及異常的捕獲和處理和圖解詳解
java 異常是程式執行過程中出現的錯誤。Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception。其中異常類Exception又分為執行時異常(RuntimeException)和非執行時異常(非runtimeException),也稱之為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。
1、Error與Exception
Error是程式無法處理的錯誤,比如OutOfMemoryError、ThreadDeath
這些異常發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。
Exception是程式本身可以處理的異常,這種異常分兩大類執行時異常和非執行時異常。程式中應當儘可能去處理這些異常。
2、執行時異常和非執行時異常
執行時異常: 都是RuntimeException類及其子類異常: IndexOutOfBoundsException索引越界異常
ArithmeticException:數學計算異常
NullPointerException:空指標異常
ArrayOutOfBoundsException:陣列索引越界異常
ClassNotFoundException:類檔案未找到異常
ClassCastException:造型異常(型別轉換異常)
這些異常是不檢查異常(Unchecked Exception),程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的。
非執行時異常:是RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如:
IOException、檔案讀寫異常
FileNotFoundException:檔案未找到異常
EOFException:讀寫檔案尾異常
MalformedURLException:URL格式錯誤異常
SocketException:
SQLException:SQL資料庫異常
3、異常的捕獲和處理
Java異常的捕獲和處理是一個不容易把握的事情,如果處理不當,不但會讓程式程式碼的可讀性大大降低, 而且導致系統性能低下,甚至引發一些難以發現的錯誤。
try、catch方式:
try{
//(嘗試執行的)程式程式碼
}catch(異常型別 異常的變數名){
//異常處理程式碼
}finally{
//異常發生,方法返回之前,總是要執行的程式碼
}
try、catch、finally三個語句塊應注意的問題
第一、try、catch、finally三個語句塊均不能單獨使用,三者可以組成 try...catch...finally、try...catch、 try...finally三種結構,catch語句可以有一個或多個,finally語句最多一個。
第二、try、catch、finally三個程式碼塊中變數的作用域為程式碼塊內部,分別獨立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變數定義到這些塊的外面。
第三、多個catch塊時候,只會匹配其中一個異常類並執行catch塊程式碼,而不會再執行別的catch塊,並且匹配catch語句的順序是由上到下。
拋異常給上一級方式:
public static void demo() throws Exception{
//丟擲一個檢查異常
throw new Exception("方法demo中的Exception");
}
我們看上面的程式碼可以看到兩個關鍵字,throw和throws關鍵字
throw:是用於方法體內部,用來丟擲一個Throwable型別的異常。
throws:是用於方法體外部的方法宣告部分,用來宣告方法可能會丟擲某些異常。僅當丟擲了檢查異常,該方法的呼叫者才必須處理或者重新丟擲該異常。當方法的呼叫者無力處理該異常的時候,應該繼續丟擲。
相關推薦
java異常體系以及異常的捕獲和處理和圖解詳解
java 異常是程式執行過程中出現的錯誤。Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception。其中異常類Exception又分為執行
java 異常體系以及異常的捕獲
java 異常是程式執行過程中出現的錯誤。Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception。其中異常類Exception又分為執行時異
【詳】JAVA中異常分類以及異常處理方法之間的區別以及聯絡
異常在日長開發中就像看見地鐵裡邊的人頭一樣的,放眼望去,齊刷刷的一片,各種異常。分佈範圍比較廣泛,很多人看到異常,就這表情 JAVA中異常: NullPointerException 空指標異常
Java學習筆記05--強制型別轉換 ;內部類(瞭解即可) ;Java異常體系及異常處理;iOS中的try catch 塊
===============java相關講解============= 強制型別轉換: 基本資料型別的轉換 小資料型別---->大的資料型別 自動型別轉換 大資料型別----->小資料型別 強制型別轉換
JavaScript基礎---異常US信用盤平臺出租處理和循環語句
cep cti java console 包含 可用 lse script 其他 你可以US信用盤平臺出租 haozbbs.com Q1446595067 用 throw 語句拋出一個異常並且用 try...catch 語句捕獲處理它 throw 語句 try...catc
Spring boot(9) 的異常,以及異常頁面的處理
一,如果發生錯誤, 返回的頁面內容如下 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Th
Java實現檔案以及資料夾的建立和刪除
1,檔案建立 /** * 建立指定路徑檔案 * * @param filePath:指定路徑(包括檔名的絕對路徑) */ public static void createFile(String filePath) { File file = new File(
異常處理與MiniDump詳解 1 C++異常
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
異常處理與MiniDump詳解 4 MiniDump
程式崩潰的問題解決了,問題是,有很多時候,很多程式是不允許隨便崩潰的,這樣,在程式崩潰後再去發現問題就有些晚了,那麼,有沒有程式不崩潰時也能發現問題的方法呢?前面描述的SEH就是一種讓程式不崩潰的方法,不過在那種方式下,按以前描述的方法,崩潰是不崩潰了,但是實際上,掩蓋了很多問題,對於問題的發現有些不利的地方
異常處理與MiniDump詳解【轉帖】
(1) C++異常 一、 綜述 我很少敢為自己寫的東西弄個詳解的標題,之所以這次敢於這樣,自然還算是有點底氣的。並且也以此為動力,督促自己好好的將這兩個東西研究透。 當年剛開始工作的時候,第一個工作就是學習breakpad的原始碼,然後瞭解其原理,為公司寫一個ExceptionHandle的庫,以處理伺
離群點檢測與序列資料異常檢測以及異常檢測大殺器-iForest
1. 異常檢測簡介 異常檢測,它的任務是發現與大部分其他物件不同的物件,我們稱為異常物件。異常檢測演算法已經廣泛應用於電信、網際網路和信用卡的詐騙檢測、貸款審批、電子商務、網路入侵和天氣預報等領域。這些異常物件的主要成因有:來源於不同的模式、自然變異、資料測量以及
關於java正則表示式非捕獲型括號和捕獲型括號的研究
今天在做一個正則表示式的解析時,突然看見一個?:的例子,就看不懂了,然後在網上查了下,竟然是非捕獲型括號,意思就是匹配pattern,但不包含在match的group方法裡面。 (?: pattern)是非捕獲型括號 匹配pattern,
異常處理與MiniDump詳解-(3)SHE(Structured Exception Handling)
The __leave keyword is valid within a try-finally statement block. The effect of __leave is to jump to the end of the try-finally block. The termination ha
JAVA中堆棧和內存分配詳解(摘抄)
如果 public china weight 所有 有道 動態 面試題 class 在Java中,有六個不同的地方可以存儲數據: 1.寄存器:最快的存儲區, 由編譯器根據需求進行分配,我們在程序中無法控制. 2. 棧:存放基本類型的變量數據和對象的引用,但對象本身不存放在棧
淺談IP地址和子網掩碼的對應關系,以及2進制和10進制詳解!
2進制和10進制詳解!大家好,我是帶你們成長的凡凡~IP地址的結構: #長度為 32 bit;先 #結構 - 網絡位 + 主機位子網掩碼: -作用 區分IP地址中的網絡位與主機位 必須與IP地址,一一對應,成對出現; -表示 純2進
java中==和equals和hashcode的區別詳解
style void ted 基本類型 內存 class 存儲 throw rgs 一、相同點 都是用來進行值或對象的比較。 二、不同點 對於“==”而言,對於基本類型(char,byte,short,int,long,float,double
java中==和equals的區別詳解
字符 blog 的區別 代碼塊 數組 sss oss 兩種 內存劃分 分析前基礎了解: 一)JVM把內存劃分成兩種:一種是棧內存,一種是堆內存。 ①在函數中定義的一些基本類型的變量和對象的引用變量(變量名)都在函數的棧內存中分配。 ②當在一段代碼塊定義一個變量時
Java WebService接口生成和調用 圖文詳解
cto 技術分享 tex 什麽 wsdl eclipse ces 硬件 block webservice簡介: Web Service技術, 能使得運行在不同機器上的不同應用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數據或集成。依據Web Service規範實施
Java多線程——wait方法和notify方法的詳解
執行 註意 2.0 消費 如果 鎖對象 16px not 線程池 wait():等待,如果線程執行了wait方法,那麽該線程會進入等待的狀態,等待狀態下的線程必須要被其他線程調用notify()方法才能喚醒。 notify():喚醒,喚醒線程池等待線程其中的一個。 noti
C/C++ 程式的編譯預處理和條件編譯指令詳解
** C/C++ 程式的編譯預處理和條件編譯指令詳解** 編譯預處理 (1)#include 包含指令作用為 將一個原始檔嵌入到當前原始檔中該點處。 #include<檔名> : 按標準方式搜尋,檔案位於C++系統目錄的include子目錄下 #include"檔名" :