Java編程中,錯誤和異常是經常遇到的問題。錯誤和異常都可以由程序的運行引發,但自重要的區別。
錯誤(Error)是指在程序運行過程中不可恢復的嚴重問題,會導致程序終止。比如,OutOfMemoryError(內存耗盡錯誤),StackOverflowError(棧溢出錯誤)都是Java中常見的錯誤。
public static void main(String[] args) { int[] array = new int[Integer.MAX_VALUE]; }
這段程序創建一個長度為Integer.MAX_VALUE的數組,由于數組太大,申請內存時會發生OutOfMemoryError錯誤,導致程序無法正常運行。
異常(Exception)是可被程序處理的問題,當程序發現異常時,可以通過拋出異常來通知調用者出現了問題。異??梢苑譃槭軝z異常和未受檢異常兩種。
受檢異常(Checked Exception)需要在方法簽名中聲明,程序運行時必須處理該異常,否則編譯器會拋出錯誤。比如,IOException、SQLException就是受檢異常。
public void readFile() throws IOException { FileReader reader = new FileReader("file.txt"); reader.read(); reader.close(); }
這段程序讀取一個文件,如果文件不存在或不能讀取,就會發生IOException異常,由于IOException是受檢異常,程序必須聲明并處理該異常。
未受檢異常(Unchecked Exception)不需要在方法簽名中聲明,程序運行時可以處理或不處理該異常,編譯器不會檢測該異常是否被處理。比如,NullPointerException、ArrayIndexOutOfBoundsException就是未受檢異常。
public int divide(int a, int b) { return a / b; }
這段程序計算a/b的結果,在b等于0時會發生ArithmeticException異常,由于ArithmeticException是未受檢異常,程序可以選擇處理或不處理該異常。
綜上所述,錯誤和異常都會導致程序運行出錯,但錯誤是無法被程序處理的嚴重問題,導致程序終止;異常則是可被程序處理的問題,可以通過拋出異常來通知調用者出現了問題。