Java基礎 ---Throwable異常類
前言:
相信很多小夥伴在其他語言裡都是用過異常處理和丟擲過異常比如:VB裡丟擲異常使用Throw "異常提示"這種方式來丟擲異常嗎,C#直接宣告異常throw new Excption("異常提示資訊")。這兩種丟擲異常的方法,一種是過程化的而另一種是物件導向的思想。但是這兩種思想捕獲異常的方式是一樣的。
Try{
}catch(){
}
基本上都是這個格式,只是在使用的時候細節上會與點小差距。今天介紹java的異常處理,從根上介紹。從Exception的父類開始介紹,還有一個我們不能處理的異常Error這個是錯誤。錯誤是程式設計師不能自己處理的,只能交給jvm虛擬機器處理。
目錄
public void printStackTrace() :
Throwable體系
Error
Error:嚴重錯誤Error,無法通過處理的錯誤,只能事先避免,好比絕症。
Exception
Exception:表示異常,異常產生後程式設計師可以通過程式碼的方式糾正,使程式繼續執行,是必須要處理的。好 比感冒、闌尾炎。
異常分類
編譯期異常
:checked異常。在編譯時期,就會檢查,如果沒有處理異常,則編譯失敗。(如日期格式化異常)
執行時異常
runtime異常。在執行時期,檢查異常.在編譯時期,執行異常不會編譯器檢測(不報錯)。(如數學異 常)
Throwable常用方法
public void printStackTrace() :
解釋:
列印異常的詳細資訊。 包含了異常的型別,異常的原因,還包括異常出現的位置,在開發和除錯階段,都得使用printStackTrace。
程式碼:
try {
Date date= sdf.parse("1998-0428");
} catch (ParseException e) {
e.printStackTrace();
}
public String getMessage() :
解釋:
獲取發生異常的原因。 提示給使用者的時候,就提示錯誤原因。
程式碼:
try {
Date date= sdf.parse("1998-0428");
} catch (ParseException e) {
e.getMessage();
}
public String toString() :
解釋:
獲取異常的型別和異常描述資訊(不用)。
程式碼:
try {
Date date= sdf.parse("1998-0428");
} catch (ParseException e) {
e.toString();
}
異常處理方法
在編寫程式時,我們必須要考慮程式出現問題的情況。比如,在定義方法時,方法需要接受引數。那麼,當呼叫方 法使用接受到的引數時,首先需要先對引數資料進行合法的判斷,資料若不合法,就應該告訴呼叫者,傳遞合法的 資料進來。這時需要使用丟擲異常的方式來告訴呼叫者。 在java中,提供了一個throw關鍵字,它用來丟擲一個指定的異常物件。
那麼,丟擲一個異常具體如何操作呢?
1. 建立一個異常物件。封裝一些提示資訊(資訊可以自己編寫)。
2. 需要將這個異常物件告知給呼叫者。
怎麼告知呢?
怎麼將這個異常物件傳遞到呼叫者處呢?
通過關鍵字throw 就可以完成。
throw 異常物件。
throw用在方法內,用來丟擲一個異常物件,將這個異常物件傳遞到呼叫者處,並結束當前方法的執行。
丟擲
格式
throw new 異常類名(引數);
例如:
throw new NullPointerException("要訪問的arr陣列不存在");
throw new ArrayIndexOutOfBoundsException("該索引在陣列中不存在,已超出範圍");
示例
public class ThrowDemo {
public static void main(String[] args) {
//建立一個陣列
int[] arr = {2,4,52,2};
//根據索引找對應的元素
int index = 4;
int element = getElement(arr, index);
System.out.println(element);
System.out.println("over");
}
/*
* 根據 索引找到陣列中對應的元素
*/
public static int getElement(int[] arr,int index){
//判斷 索引是否越界
if(index<0 || index>arr.length‐1){
/*
判斷條件如果滿足,當執行完throw丟擲異常物件後,方法已經無法繼續運算。
這時就會結束當前方法的執行,並將異常告知給呼叫者。這時就需要通過異常來解決。
*/
throw new ArrayIndexOutOfBoundsException("哥們,角標越界了~~~");
}
int element = arr[index];
return element;
}
}
捕獲
上面是直接把宣告的物件丟擲,下面演示如何處理丟擲的異常。(上面的這種方式不處理異常,程式會直接崩潰。)所以只要丟擲異常 呼叫者必須處理。
處理方法
try catch
public class TryCatchDemo4 {
public static void main(String[] args) {
try {
read("a.txt");
} catch (FileNotFoundException e) {
//抓取到的是編譯期異常 丟擲去的是執行期
throw new RuntimeException(e);
} finally {
System.out.println("不管程式怎樣,這裡都將會被執行。");
}
System.out.println("over");
}
/*
*
* 我們 當前的這個方法中 有異常 有編譯期異常
*/
public static void read(String path) throws FileNotFoundException {
if (!path.equals("a.txt")) {//如果不是 a.txt這個檔案
// 我假設 如果不是 a.txt 認為 該檔案不存在 是一個錯誤 也就是異常 throw
throw new FileNotFoundException("檔案不存在");
}
}
}
呼叫者再次丟擲
這個是異常不在內部處理,丟擲給呼叫者。(呼叫者如果是main方法的話還可以再次丟擲,這次丟擲是直接拋給JVM虛擬機器處理)
//判斷當前註冊賬號是否存在
//因為是編譯期異常,又想呼叫者去處理 所以宣告該異常
public static boolean checkUsername(String uname) throws LoginException{
for (String name : names) {
if(name.equals(uname)){//如果名字在這裡面 就丟擲登陸異常
throw new RegisterException("親"+name+"已經被註冊了!");
}
}
return true;
}
相關文章
- Java 異常處理上篇: Throwable 詳解Java
- Java基礎-異常Java
- Java基礎 — 異常Java
- [Java基礎]異常Java
- Java程式設計基礎20——異常&IO(File類)Java程式設計
- 異常-Throwable的幾個常見方法
- Java基礎知識——異常Java
- Java基礎Day07(Map Calender Date 包裝類 System類 異常)Java
- JAVA物件導向基礎--異常Java物件
- Java基礎異常整理(持續更新)Java
- 聊聊Java中的異常(基礎篇)Java
- Java零基礎之異常(新手必看)Java
- Python基礎 -- 異常處理Python
- JavaSE基礎系列之異常Java
- JAVA類檔案操作和異常Java
- Java基礎之淺談異常與瞭解斷言Java
- Java程式設計基礎13——常見物件_String類Java程式設計物件
- PHP基礎:異常處理ExceptionPHPException
- python 基礎之異常處理Python
- Java基礎類庫【Java】Java
- 傳智黑馬java基礎學習——day21(異常)Java
- 【躍遷之路】Java基礎練習(異常)(最後更新:2018.05.03)Java
- Java 異常 隨機數 包裝類Java隨機
- 關於Java異常的分類示例Java
- JAVA基礎--Arrays類Java
- 夯實Java基礎系列10:深入理解Java中的異常體系Java
- Flutter (二) Dart 語言基礎詳解 (異常,類,Mixin, 泛型,庫)FlutterDart泛型
- Oracle開發基礎-異常處理Oracle
- PHP基礎之錯誤與異常PHP
- 異常-異常的概述和分類
- 異常分類
- Java之Throwable體系Java
- 【java】異常Java
- java 異常Java
- Java 異常Java
- Java異常Java
- 異常JavaJava
- Java基礎| 類和物件Java物件