Java異常知識整理
首先得明確一點,異常與錯誤是有本質區別的:
錯誤:斷電、宕機、山崩、海嘯或者硬體等問題所導致程式不能執行
異常:1.它是可以處理的,處理之後程式可以繼續執行
2.異常是物件
3.如果自己不處理異常,會拋給呼叫者,如果呼叫者也不處理異常,最終會拋給JVM,程式會停止執行
異常又分為:編譯異常和執行時異常
編譯異常:呼叫了丟擲異常的方法,不處理,編譯就會失敗
執行異常:丟擲的異常是RuntimeException,或是它子類物件
Jdk API文件描述:
Throwable
類是 Java 語言中所有錯誤或異常的超類。只有當物件是此類(或其子類之一)的例項時,才能通過 Java 虛擬機器或者 Java throw
catch
子句中的引數型別。
Exception
類及其子類是 Throwable
的一種形式,它指出了合理的應用程式想要捕獲的條件。
RuntimeException
是那些可能在 Java 虛擬機器正常執行期間丟擲的異常的超類。
第一個異常程式:
package com.xiao.exception; /** * @author 笑笑 * @Date 2018年3月21日下午10:29:00 * */ public class ExceptionDemo { //第一個異常測試,索引越界異常 public static void test1(){ int[] arr = {1,2,3}; System.out.println(arr[3]); } }
由於陣列只有三個元素,索引從0開始,最大索引為2,我列印arr[3],陣列沒有此索引,這樣就會丟擲java.lang.ArrayIndexOutOfBoundsException(索引越界異常)。
主動丟擲異常:
關鍵字:throw +建立異常物件 在方法內部丟擲異常的物件,必須是Exception類或其子類
throws + 類名 在方法上宣告異常,這樣呼叫者才能知道被呼叫者內部可能有異常發生
注:如果方法內部丟擲的是執行異常,方法宣告不需要throws語句
//throw/throws 關鍵字測試 public static void test2() throws Exception{ throw new Exception("我是throw"); }
異常處理:
方式一:在方法宣告上,使用throws關鍵字把異常向上丟擲
方式二:try...catch...finally 語句處理異常
public static void test3() {
try{
//可能出現異常的程式碼
}catch(異常型別 變數){
//處理異常的程式碼
}finally{
//必須執行的程式碼
}
}
finally有一種情況不會執行:
在try或catch中加上程式碼:System.exit(0); 這句程式碼表示停止虛擬機器,這樣finally中的程式碼就不會執行了
finally程式碼塊一般用於釋放資源
繼承關係中的異常:
父類的方法,如果丟擲異常,子類重寫該方法,可以丟擲異常,也可以不丟擲異常;但是,如果子類要丟擲異常,丟擲的異常不能大於父類丟擲的異常。(必須是父類丟擲的異常或其子類)
父類的方法沒有丟擲異常,子類重寫後,不能丟擲異常;如果有異常,只能使用try...catch...語句處理異常
自定義異常:
繼承Throwable類,或者繼承他的子類;
即:繼承其子類:Exception類或者RuntimeException類
在構造方法中,使用super();把異常資訊傳給父類。
相關推薦
Java異常知識整理_處理異常時的效能開銷
1.首先列兩個從別的地方看到的說法: try-catch程式碼段會產生額外的效能開銷,或者換個角度說,它往往會影響JVM對程式碼進行優化,所以建議僅捕獲有必要的程式碼段,儘量不要一個大的try包住整段的程式碼;與此同時,利用異常控制程式碼流程,也不是一個好主意,遠比我們通常意義上的條件語句(if/el
Java異常知識整理
首先得明確一點,異常與錯誤是有本質區別的: 錯誤:斷電、宕機、山崩、海嘯或者硬體等問題所導致程式不能執行 異常:1.它是可以處理的,處理之後程式可以繼續執行 2.異常是物件 3.如果自己不處理異常,會拋給呼叫者,如果呼叫者也不處理異
Java基礎知識整理(一)
顯式 sys 轉換 強制 print pri 字符 parse ger Java開發環境JDK(Java編輯器、Java運行工具(JRE作用)、Java文檔生成工具、Java打包工具) 1.Java是嚴格區分大小寫的。2.Java程序中一句連續的字符串不能分開在兩行書寫,
java基礎知識整理
最後一行 post 使用 數字 關鍵字void ssp oid 布爾 .exe 1.JVM、JRE和JDK的區別。 (1)JVM(Java Virtual Machine):java虛擬機,用於保證java跨平臺的特性,java語言是跨平臺的,jvm不是跨平臺的。
java異常基礎整理
nbsp itl 解析錯誤 進行 ron 判斷 nts eof 出了 1、try-catch e.printStackTrace(); 會打印出方法的調用痕跡,如此例,會打印出異常開始於TestException的第16行,這樣就便於定位和分析到底哪裏出了異常 2、使用異
Java 基礎知識整理 (待整理)
ioc容器 invoke string spa 額外 器) cas 描述符 如果 JVM之類加載器(ClassLoader)基本介紹 類加載器用於將class文件加載到JVM中去執行。下面介紹類加載器涉及到的基本概念和加載基本過程。 一、Java虛擬機與程序的生命
Java陣列知識整理
一、陣列的概念 陣列是相同資料型別元素的集合。 陣列本身是引用資料型別,但它可以儲存基本資料型別和引用資料型別。 二、陣列的宣告 語法一:資料型別[] 陣列名; 語法二:資料型別 陣列名[]; 三、陣列的建立 兩個要素:資料型別、長度。 語法一:資料型別[]
java基礎知識整理梳理day02---變數與資料型別
變數與資料型別 一、程式設計規範 在仍何地方的名字我們都要做到見名知意 適當合理的程式碼縮排 書寫過程中的成對程式設計 對程式碼進行合理註釋 二、關鍵字與識別符號 1、關鍵字 1)、定義 在java中有特定含義的單詞 2)、特點 全部小寫 3)、注意事
java基礎知識整理 ---Day06面向物件
一、程式語言的發展 機器語言 直接由計算機的指令組成,指令、資料、地 址都以“0”和“1”組成:可以被計算機直接識別並執行。 組合語言 用容易理解和記憶的符號表示指令、資料以 及暫存器等,抽象層次很低,程式設計師需要考慮大量的機器細節。 高階語言 遮蔽了機器細節,
java基礎知識整理Day04---迴圈
迴圈 一、迴圈控制 1…while迴圈(一般用於條件迴圈) 1.1語法: **條件初始化; while(判斷條件){ 迴圈體語句; 條件變化; }** 2.do while 先執行後判斷 結構: 初始語句 do{ //迴圈體 }while
java基礎知識整理(1)
一、學習的前提 (1)目標要明確 (2)興趣是最好的老師  
java基礎知識整理(7)——繼承與抽象
一、繼承 1、概述 多個類中存在相同屬性和行為時,將這些相同的內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼那個類即可。多個類可以稱為子類,單獨這個類稱為父類或者超類。子類可
Java NIO知識整理
前幾天學了下NIO這塊,因之前基本沒用到過也算是新知識,這篇文章著重分享Channel,記憶體對映,緩衝區不會做過多介紹,有興趣可以百度一下找資料看 一 使用通道邊讀邊寫的經典寫法 以複製圖片到同一個目錄為例,把wp.jpg複製一份放到d盤下 package com.d
Java基本型別與引用型別 以及 Java記憶體知識整理
Java基本型別和引用型別是什麼?每種基本型別都佔多少位多少位元組?詳見下表 基本型別 整型 byte 1位元組 -27~27-1 -128~127 short 2位元組 -215~215-1 -32,768~32,767 (3萬多)
阿裏 P8 資深架構師吐血總結的 《Java 核心知識整理&面試.pdf》| 免費分享
park title except 負載 模式 .com 部分 exceptio ase 阿裏 P8 級資深架構師吐血總結的一份 Java 核心知識.pdf, 內容覆蓋很廣,Java 核心基礎、Java 多線程、高並發、Spring、微服務、Netty 與 RPC、Zook
JAVA異常基本知識及異常在Spring框架中的整體解決方案
我們 程序 details 編譯錯誤 htm 及其 arch extends exception 異常的頂級父類是Throwable,下面有兩個子類Exception和Error。 Error錯誤一般是虛擬機相關的問題,如系統崩潰,虛擬機錯誤等,應用程序無法處理,直接導致
Java內存知識整理
整理 .get 緩存 zed [] pan 簡潔 net 重排序 因主要是摘錄,先列參考文獻: http://ifeve.com/jmm-faq/ 1,我理解的Java內存模型是在多處理器,多線程的場景下保證在內存裏的讀寫不會存在歧義。 “Java內存模型描述了在多線程
整理Java基礎知識--Number&Math類
gre 進制 static 取整 一個 使用 1.0 平方根 卡爾 Java Number內置數據類型:byte int long short double 等 int i = 10; float i = 10.5f; 實際開發中,經常遇到使用對象,而不是內置數據類型,包裝
整理Java基礎知識--Character類
lower stat public 基本 spa println int [] 後退 Java Character 類Character 類用於對單個字符進行操作Character 類在對象中包裝一個基本類型 char 的值 public class Test{ p
整理Java基礎知識--String類
string對象 提取 class lower rep oid cat 先後 連接字符串 Java String 類創建字符串最簡單的寫法:String i = "我是字符串";String 類是不可改變的,一旦創建了String對象,就固定了 Stri