1. 程式人生 > >Java異常知識整理

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