異常(Error和Exception)

什麼是異常

比如上午我們一般是開車去上班,正常情況下,一般都不會遲到,但是今天突然有個問題,車壞了或者限行了,於是乎你改坐公交了,就有可能會遲到,這就屬於一種異常的情況。在實際生活中呢,可能會遇到很多很多的不測,天有不測風雲,那就是這樣的。

實際工作中,遇到的情況不可能是非常完美的。比如:你寫的某個模塊,你要輸入一個字符串,他輸入了一個漢字,用戶輸入不一定符合你的要求、你的程序文件要打開某個文件,這個文件可能不存在或者文件格式不對,你要讀取數據庫的數據,數據可能是空的等。我們的程序在跑著,內存或者硬盤可能滿了。等等

軟件程序在運行過程中,非常可能遇到剛剛提到的這些異常問題,我們叫做異常,英文是: Exception , 意思是例外。

這些,例外情況,或者叫異常,怎麼讓我們寫的程序做出一些合理的處理,不至於程序崩 潰。

java.lang.StackOverflowError:

<code> 1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5
6 }
7
8 //遞歸沒有出口死循環 棧溢出錯誤java.lang.StackOverflowError,一般不要這麼寫
9 public void a() {
10 b();
11 }
12
13 public void b() {
14 a();
15 }
16 }
/<code>

java.lang.ArithmeticException:/ by zero

<code> 1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5
6 //java.lang.ArithmeticException:/ by zero
7 System.out.println(11 / 0);
8 }
9
10 }
/<code>

Error: ;少分號

<code>1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5 //Error: ;
6 System.out.println()
7 }
8
9 }
/<code>

異常指程序運行中出現的不期而至的各種情況,如:文件找不到、網絡連接失敗、非法參數等

異常發生在程序運行期間,它影響了正常的程序執行流程。

簡單分類

  1. 要理解Java異常處理是如何工作的,你需要掌握以下三種類型的異常:
  2. 檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的,例如要打開一個不存在的文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。
  3. 運行時異常:運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯是被忽略。
  4. 錯誤 Error :錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。

異常體系結構

Java把異常處理當作對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類

在JavaAPI中已經定義了許多異常類,這些異常類分為兩大類,錯誤 Error 和異常 Exception, Error無法預見,Exception通常是可以預料到的事情。

異常(Error和Exception)

Error

Error是由Java虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關

Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所

需的內存資源時,將出現 OutOfMemoryError。 這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止;

還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)鏈接錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程序的控制能力之 外,而且絕大多數是程序運行時不允許出現的狀況。

Exception

在Exception分支中有一個重要的子類RuntimeException(運行時異常)

  • ArraryIndexOutOfBoundsException(數組下標越界異常)
  • NullPointerException(空指針異常)
  • ArithmeticException(算數異常)
  • MissingResourceException(丟失資源)
  • ClassNotFoundEcxeption(找不到類)等異常,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以選擇不處理。

這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度儘可能避免這兩在異常的發生;

Error和Exception的區別:

Error通常是災難性的致命的錯誤,是程序無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止線程;Exception通常情況下是可以被程序處理的,並且在程序中應該儘可能的去處理這些異常。


分享到:


相關文章: