javaexception的簡單介紹

本文目錄一覽:

java中error與exception的區別是什麼?

一、含義不同:

Error類一般是與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。

Exception類表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該儘可能處理異常,使程序恢復運行,而不應該隨意終止異常。

二、用途不同:

Exception和Error體現了Java平台設計者對不同異常情況的分類。Exception是程序正常運行中,可以預料的意外情況,可能並且應該被捕獲,進行相應處理。

Error是指在正常情況下,不大可能出現的情況,絕大部分的Error都會導致程序處於非正常的、不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。

好處

讓異常處理與業務邏輯的主線分離,我們可以對可以遇見的異常作分支處理,其實將業務邏輯與異常處理分離也是Exception設計的主旨,其次Java Exception 不需要像C語言那樣在程序的多個地方去檢測同一個錯誤,並就地作異常的處理,相比老式的錯誤處理,現行的錯誤處理的結構則來的更加清晰。

以上內容參考:百度百科-Exception

java中5種常見的異常(Exception)是哪些?

Java.lang.NullPointerException

這個異常大家肯定都經常碰到,異常的解釋是”程序遇上了空指針”,簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針,很多情況下是一些剛開始學習編程的朋友常犯的錯誤,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(假如要調用的話)

2. java.lang.ClassNotFoundException

這個異常是很多原本在JB等開發環境中開發的程序員,把JB下的程序包放在WTk下編譯經常出現的問題,異常的解釋是”指定的類不存在”,這裡主要考慮一下類的名稱和路徑是否正確即可,假如是在JB下做的程序包,一般都是默認加上Package的,所以轉到WTK下後要注重把Package的路徑加上。

3. java.lang.ArithmeticException

這個異常的解釋是”數學運算異常”,比如程序中出現了除以零這樣的運算就會出這樣的異常,對這種異常,大家就要好好檢查一下自己程序中涉及到數學運算的地方,公式是不是有不妥了。

4. java.lang.ArrayIndexOutOfBoundsException

這個異常相信很多朋友也經常碰到過,異常的解釋是”數組下標越界”,現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太輕易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。

5. java.lang.IllegalAccessException

這個異常的解釋是”沒有訪問許可權”,當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了Package的情況下要注重這個異常。

Java中Exception是什麼?

Exception是JAVA異常類

是Throwable的子類(Error也是她的子類,Error是比較嚴重的錯誤)

異常分為普通異常和運行時異常,運行時異常我們可以不處理,可以讓虛擬機來管。

普通異常我們必須捕獲(try{}catch(Exception

e){}finally{})

java exception異常怎麼解決

在 Java 應用程序中,異常處理機製為:拋出異常,捕捉異常。

拋出異常:當一個方法出現錯誤引發異常時,方法創建異常對象並交付運行時系統,異常對象中包含了異常類型和異常出現時的程序狀態等異常信息。運行時系統負責尋找處置異常的代碼並執行。

捕獲異常:在方法拋出異常之後,運行時系統將轉為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發生時依次存留在調用棧中的方法的集合。當異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適 的異常處理器。運行時系統從發生異常的方法開始,依次回查調用棧中的方法,直至找到含有合適異常處理器的方法並執行。當運行時系統遍歷調用棧而未找到合適 的異常處理器,則運行時系統終止。同時,意味著Java程序的終止。

對於運行時異常、錯誤或可查異常,Java技術所要求的異常處理方式有所不同。

由於運行時異常的不可查性,為了更合理、更容易地實現應用程序,Java規定,運行時異常將由Java運行時系統自動拋出,允許應用程序忽略運行時異常。

對於方法運行中可能出現的Error,當運行方法不欲捕捉時,Java允許該方法不做任何拋出聲明。因為,大多數Error異常屬於永遠不能被允許發生的狀況,也屬於合理的應用程序不該捕捉的異常。

對於所有的可查異常,Java規定:一個方法必須捕捉,或者聲明拋出方法之外。也就是說,當一個方法選擇不捕捉可查異常時,它必須聲明將拋出異常。

能夠捕捉異常的方法,需要提供相符類型的異常處理器。所捕捉的異常,可能是由於自身語句所引發並拋出的異常,也可能是由某個調用的方法或者Java運行時 系統等拋出的異常。也就是說,一個方法所能捕捉的異常,一定是Java代碼在某處所拋出的異常。簡單地說,異常總是先被拋出,後被捕捉的。

任何Java代碼都可以拋出異常,如:自己編寫的代碼、來自Java開發環境包中代碼,或者Java運行時系統。無論是誰,都可以通過Java的throw語句拋出異常。

從方法中拋出的任何異常都必須使用throws子句。

捕捉異常通過try-catch語句或者try-catch-finally語句實現。

總體來說,Java規定:對於可查異常必須捕捉、或者聲明拋出。允許忽略不可查的RuntimeException和Error。

4.1 捕獲異常:try、catch 和 finally

1.try-catch語句

在Java中,異常通過try-catch語句捕獲。其一般語法形式為:

try {

// 可能會發生異常的程序代碼

} catch (Type1 id1){

// 捕獲並處置try拋出的異常類型Type1

}

catch (Type2 id2){

//捕獲並處置try拋出的異常類型Type2

}

關鍵詞try後的一對大括弧將一塊可能發生異常的代碼包起來,稱為監控區域。Java方法在運行過程中出現異常,則創建異常對象。將異常拋出監控區域之 外,由Java運行時系統試圖尋找匹配的catch子句以捕獲異常。若有匹配的catch子句,則運行其異常處理代碼,try-catch語句結束。

匹配的原則是:如果拋出的異常對象屬於catch子句的異常類,或者屬於該異常類的子類,則認為生成的異常對象與catch塊捕獲的異常類型相匹配。

例1 捕捉throw語句拋出的「除數為0」異常。

public class TestException {

public static void main(String[] args) {

int a = 6;

int b = 0;

try { // try監控區域

if (b == 0) throw new ArithmeticException(); // 通過throw語句拋出異常

System.out.println(“a/b的值是:” + a / b);

}

catch (ArithmeticException e) { // catch捕捉異常

System.out.println(“程序出現異常,變數b不能為0。”);

}

System.out.println(“程序正常結束。”);

}

}

運行結果:程序出現異常,變數b不能為0。

程序正常結束。

例1 在try監控區域通過if語句進行判斷,當「除數為0」的錯誤條件成立時引發ArithmeticException異常,創建 ArithmeticException異常對象,並由throw語句將異常拋給Java運行時系統,由系統尋找匹配的異常處理器catch並運行相應異 常處理代碼,列印輸出「程序出現異常,變數b不能為0。」try-catch語句結束,繼續程序流程。

事實上,「除數為0」等ArithmeticException,是RuntimException的子類。而運行時異常將由運行時系統自動拋出,不需要使用throw語句。

例2 捕捉運行時系統自動拋出「除數為0」引發的ArithmeticException異常。

public static void main(String[] args) {

int a = 6;

int b = 0;

try {

System.out.println(“a/b的值是:” + a / b);

} catch (ArithmeticException e) {

System.out.println(“程序出現異常,變數b不能為0。”);

}

System.out.println(“程序正常結束。”);

}

}

運行結果:程序出現異常,變數b不能為0。

程序正常結束。

例2 中的語句:

System.out.println(“a/b的值是:” + a/b);

在運行中出現「除數為0」錯誤,引發ArithmeticException異常。運行時系統創建異常對象並拋出監控區域,轉而匹配合適的異常處理器catch,並執行相應的異常處理代碼。

由於檢查運行時異常的代價遠大於捕捉異常所帶來的益處,運行時異常不可查。Java編譯器允許忽略運行時異常,一個方法可以既不捕捉,也不聲明拋出運行時異常。

例3 不捕捉、也不聲明拋出運行時異常。

public class TestException {

public static void main(String[] args) {

int a, b;

a = 6;

b = 0; // 除數b 的值為0

System.out.println(a / b);

}

}

運行結果:

Exception in thread “main” java.lang.ArithmeticException: / by zero

at Test.TestException.main(TestException.java:8)

例4 程序可能存在除數為0異常和數組下標越界異常。

public class TestException {

public static void main(String[] args) {

int[] intArray = new int[3];

try {

for (int i = 0; i = intArray.length; i++) {

intArray[i] = i;

System.out.println(“intArray[” + i + “] = ” + intArray[i]);

System.out.println(“intArray[” + i + “]模 ” + (i – 2) + “的值: ”

+ intArray[i] % (i – 2));

}

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println(“intArray數組下標越界異常。”);

} catch (ArithmeticException e) {

System.out.println(“除數為0異常。”);

}

System.out.println(“程序正常結束。”);

}

}

運行結果:

intArray[0] = 0

intArray[0]模 -2的值: 0

intArray[1] = 1

intArray[1]模 -1的值: 0

intArray[2] = 2

除數為0異常。

程序正常結束。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152228.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-12 00:56
下一篇 2024-11-12 00:56

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進位下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論