Java基礎(四)——異常、集合概述

異常

異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。

比如說,你的代碼少了一個分號,那麼運行出來結果是提示是錯誤 java.lang.Error;如果你用System.out.println(11/0),那麼你是因爲你用0做了除數,會拋出 java.lang.ArithmeticException 的異常。

異常發生的原因有很多,通常包含以下幾大類:

  • 用戶輸入了非法數據。
  • 要打開的文件不存在。
  • 網絡通信時連接中斷,或者JVM內存溢出。

這些異常有的是因爲用戶錯誤引起,有的是程序錯誤引起的,還有其它一些是因爲物理錯誤引起的。-

要理解Java異常處理是如何工作的,你需要掌握以下三種類型的異常:

  • 檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的。例如要打開一個不存在文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。
  • 運行時異常: 運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。
  • 錯誤: 錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。

異常的出現:

public class ExceptionDemo {
    public static void main(String[] args) {
        method();
    }

    public static void method(){
        int[] arr = {1,2,3};
        System.out.println(arr[1]);  //正常
        System.out.println(arr[3]);  //異常
    }
}

Throwable類是Java語言中所有錯誤和異常的Throwable類。 只有作爲此類(或其一個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。 類似地,只有這個類或其子類可以是catch子句中的參數類型。 對於異常,編譯時檢查的目的Throwable和任何子類Throwable ,是不是也無論是子類RuntimeExceptionError被視爲檢查的異常。

一個Error是的子類Throwable表示嚴重的問題,合理的應用程序不應該試圖捕獲。 大多數這樣的錯誤是異常情況。 ThreadDeath錯誤雖然是“正常”的條件,但也是Error一個子類,因爲大多數應用程序不應該試圖抓住它。

一個方法不需要在其throws子句中聲明Error的Error ,該子類可能在執行方法期間拋出,但未被捕獲,因爲這些錯誤是不應該發生的異常條件。 也就是說, Error及其子類被視爲未經檢查的異常,用於編譯時檢查異常。

JVM默認處理方案

如果程序出現了問題,我們沒有做任何處理,最終JVM會做默認的處理

  • 把異常的名稱, 異常原因及異常出現的位置等信息輸出在了控制檯
  • 程序停止執行

異常處理

如果程序出現了問題,我們需要自己來處理,有兩種方案:

  1. try ... catch ...
  2. throws

try...catch格式

執行流程:

  1. 程序從try裏面的代碼開始執行
  2. 出現異常,會自動生成個異常類對象,該異常對象將被提交給Java運行時系統
  3. 當Java運行時系統接收到異常對象時,會到catch中去找匹配的異常類,找到後進行異常的處理執行完畢之後,程序還可以繼續往下執行 

例子:

public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("開始");
        method();
        System.out.println("結束");
    }

    public static void method(){
        try{
            int[] arr = {1,2,3};
            System.out.println(arr[1]);  //正常
            System.out.println(arr[3]);  //異常
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("你訪問的數組索引不存在");
        }

    }
}

結果:

 

e.printStackTrace();可以輸出異常信息

throwable的成員方法

方法名 說明
public String getMessage() 返回此throwable的詳細消息字符串
public String toString() 返回此可拋出的簡短描述
public String printStackTrace() 把異常的錯誤信息輸出在控制檯

編譯時異常和運行時異常

Java中的異常被分爲兩大類:編譯時異常和運行時異常,也被稱爲受檢異常和非受檢異常
所有的RuntimeException類及其子類的實例被稱爲運行時異常,其他的異常都是編譯時異常
編譯時異常:必須顯示處理,否則程序就會發生錯誤,無法通過編譯
運行時異常:無需顯示處理,也可以和編譯時異常一樣處理

 例子:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo {
    public static void main(String[] args) {
        method();
        method2();
    }
    //運行時異常
    public static void method(){
        try{
            int[] arr = {1,2,3};
            System.out.println(arr[1]);  //正常
            System.out.println(arr[3]);  //異常
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }
    }
    //編譯時異常
    public static void method2() {
        try{
            String s = "2078-09-15";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sdf.parse(s);
            System.out.println(d);
        }catch (ParseException e){
            e.printStackTrace();
        }
    }
}

結果:

 

throws格式

雖然我們通過try..c.c..可以對異常進行處理,但是並不是所有的情況我們都有權限進行異常的處理
也就是說,有些時候可能出現的異常是我們處理不了的,這個時候該怎麼辦呢?
針對這種情況,Java 提供了throws的處理方案

例子:

public class ExceptionDemo {
    public static void main(String[] args) {
        method();
    }
    //運行時異常
    public static void method() throws ArrayIndexOutOfBoundsException{
            int[] arr = {1,2,3};
            System.out.println(arr[1]);  //正常
            System.out.println(arr[3]);  //異常
    }
}

異常處理快捷鍵:alt + enter 

自定義異常

 

集合

集合類的特點:提供-種存儲空間可變的存儲模型,存儲的數據容量可以隨時發生改變

集合體繫結構

 

 

 

一起學習,一起進步 -.- ,如有錯誤,可以發評論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章