1. 程式人生 > >java異常體系以及異常的捕獲和處理和圖解詳解

java異常體系以及異常的捕獲和處理和圖解詳解

java 異常是程式執行過程中出現的錯誤。Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception。其中異常類Exception又分為執行時異常(RuntimeException)和非執行時異常(runtimeException),也稱之為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。

1ErrorException

Error是程式無法處理的錯誤,比如OutOfMemoryErrorThreadDeath

等。

這些異常發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。

Exception是程式本身可以處理的異常,這種異常分兩大類執行時異常和非執行時異常。程式中應當儘可能去處理這些異常。

2、執行時異常和非執行時異常      

執行時異常: 都是RuntimeException類及其子類異常:     IndexOutOfBoundsException索引越界異常

ArithmeticException:數學計算異常

NullPointerException:空指標異常

ArrayOutOfBoundsException:陣列索引越界異常

ClassNotFoundException:類檔案未找到異常

ClassCastException:造型異常(型別轉換異常)

這些異常是不檢查異常(Unchecked Exception),程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的。

非執行時異常:RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如:

IOException、檔案讀寫異常

FileNotFoundException:檔案未找到異常

  EOFException:讀寫檔案尾異常

MalformedURLExceptionURL格式錯誤異常

SocketException

Socket異常

SQLExceptionSQL資料庫異常

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:用於方法體外部的方法宣告部分,用來宣告方法可能會丟擲某些異常。僅當丟擲了檢查異常,該方法的呼叫者才必須處理或者重新丟擲該異常。當方法的呼叫者無力處理該異常的時候,應該繼續丟擲。

異常處理是為了程式的健壯性。異常能處理就處理,不能處理就丟擲,最終沒有處理的異常JVM會進行處理。對於一個應用系統來說,應該有自己的一套異常處理框架,這樣當異常發生時,也能得到統一的處理風格,將優雅的異常資訊反饋給使用者。

相關推薦

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中==equalshashcode的區別

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"檔名" :