異常java,異常生物見聞錄

本文目錄一覽:

什麼是Java的異常

異常通常指,你的代碼可能在編譯時沒有錯誤,可是運行時會出現異常。比如常見的空指針異常。也可能是程序可能出現無法預料的異常,比如你要從一個文件讀信息,可這個文件不存在,程序無法運行下去了,故程序要抓這些異常,通過異常處理機制來拋出這些異常,程序員就可以通過拋出的異常來修改代碼。try{}catch{}finally{}try塊中放入可能會出現異常的代碼,catch塊負責捕獲異常,finally塊負責處理一些必須執行的代碼,比較關閉流等。

常見的java異常有:

空指針異常類:NullPointerException

當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出 null等等。

類型強制轉換異常:ClassCastException

假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出 該異常。該異常經常被稱為強制類型轉換異常。

數組下標越界異常:ArrayIndexOutOfBoundsException

當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。

文件未找到異常:FileNotFoundException

當試圖去引用一個路徑下的某個文件而該路徑下沒有文件時,拋出該異常。

數字格式異常:NumberFormatException

當試圖將一個String轉換為指定的數字類型,而該字元串卻不滿足數字類型要求的格式時,拋出該異常。

資料庫操作異常:SQLException

當執行一段SQL語句或該SQL不符合規則時拋出該異常。

輸入輸出流異常:IOException

java異常分類

一、概念

如果某個方法不能按照正常的途徑完成任務,就可以通過另一種路徑退出方法。在這種情況下

會拋出一個封裝了錯誤信息的對象。此時,這個方法會立刻退出同時不返回任何值。另外,調用

這個方法的其他代碼也無法繼續執行,異常處理機制會將代碼執行交給異常處理器。

二、異常分類

Throwable 是 Java 語言中所有錯誤或異常的超類,在 Java 中只有 Throwable 類型的實例才可以被拋出(throw)或者捕獲(catch),它是異常處理機制的基本組成類型。

實例分為 Error 和 Exception 兩種。

2.1、Error

Error 類是指 java 運行時系統的內部錯誤和資源耗盡錯誤。應用程序不會拋出該類對象。如果

出現了這樣的錯誤,除了告知用戶,剩下的就是儘力使程序安全的終止。

2.2、Exception

Exception 又有兩個分支 , 一個是運行時異常 RuntimeException , 一 個是檢查異常 CheckedException。

RuntimeException 如 :NullPointerException 、 ClassCastException ;

CheckedException 如: I/O 錯誤導致的 IOException、SQLException。

RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。 如果出現 RuntimeException,那麼一

定是程序員代碼書寫導致的錯誤.

CheckedException:一般是外部錯誤,這種異常都發生在編譯階段,Java 編譯器會強

製程序去捕獲此類異常,即會出現要求你把這段可能出現異常的程序進行 try catch,該類異常一

般包括幾個方面:

試圖在文件尾部讀取數據

試圖打開一個錯誤格式的 URL

試圖根據給定的字元串查找 class 對象,而這個字元串表示的類並不存在

三、異常的處理方式

3.1、不處理

遇到異常問題不進行具體處理,而是繼續拋給調用者 (throw,throws)

拋出異常有三種形式,一是 throw,再就是 throws,還有一種系統自動拋異常。

public static void main(String[] args) {

String s = “abc”;

if(s.equals(“abc”)) {

/** 手動拋出一個數字格式化異常 **/

throw new NumberFormatException();

} else {

System.out.println(s);

}

}

int div(int a,int b) throws Exception{

return a/b;

}

3.2、處理

try catch 捕獲異常針對性處理方式

四、Throw 和 throws 的區別

throws 用在函數上,後面跟的是異常類,可以跟多個;

語法:(修飾符)(方法名)([參數列表])[throws(異常類)]{……}

public void doA(int a) throws Exception1,Exception3{……}

throw 用在函數內,後面跟的是異常對象。

throws E1,E2,E3隻是告訴程序這個方法可能會拋出這些異常,方法的調用者可能要處理這些異常,而這些異常E1,E2,E3可能是該函數體產生的。

throw則是明確了這個地方要拋出這個異常。

結合來看:

void doA(int a) throws IOException,{

try{

……

}catch(Exception1 e){

throw e;

}catch(Exception2 e){

System.out.println(“出錯了!”);

}

if(a!=b)

throw new Exception3(“自定義異常”);

}

throws 用來聲明異常,讓調用者知道該功能可能會出現的問題(比如上方的 IO 異常),可以給出預先的處理方式;

throw 拋出具體的問題對象,執行到 throw,功能就已經結束了,跳轉到調用者,並將具體的問題對象拋給調用者。

也就是說 throw 語句獨立存在時,下面不要定義其他語句,因為執行不到。

概括:

throws 表示出現異常的一種可能性,並不一定會發生這些異常;

throw 則是拋出了異常,執行 throw 則一定拋出了某種異常對象。

五、總結

了解 Exception、Error 兩種異常的區別,面試可能會問。

區分 throws、throw使用維度。

常見的java異常有哪些?都是什麼意思?

作為一隻敬業的程序員,就是不能接受我的編程出現bug!可見我們對bug是如此的深惡痛覺!它已成為我們職業生涯中的攔路虎,所以今天精心為大家總結一下Java中常見的幾種異常,望大家多多注意。

1、java.lang.NullPointerException(空指針異常)

調用了未經初始化的對象或者是不存在的對象。經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針, 即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化, 依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)。

2、 java.lang.ClassNotFoundException指定的類不存在

這裡主要考慮一下類的名稱和路徑是否正確即可,通常都是程序試圖通過字元串來載入某個類時可能引發異常。比如:調用Class.forName();或者調用ClassLoad的finaSystemClass();或者LoadClass();

3、 java.lang.NumberFormatException字元串轉換為數字異常

當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常.如現在講字元型的數據「123456」轉換為數值型數據時,是允許的。但是如果字元型數據中包含了非數字型的字元,如123#56,此時轉換為數值型時就會出現異常。系統就會捕捉到這個異常,並進行處理。

4、java.lang.IndexOutOfBoundsException數組下標越界異常

查看調用的數組或者字元串的下標值是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候先查看一下數組的length,以免出現這個異常。

5、java.lang.IllegalArgumentException方法的參數錯誤

比如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。

6、java.lang.IllegalAccessException沒有訪問許可權

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

7、java.lang.ArithmeticException數學運算異常

當算術運算中出現了除以零這樣的運算就會出這樣的異常。

8、java.lang.ClassCastException數據類型轉換異常

當試圖將對某個對象強制執行向下轉型,但該對象又不可轉換又不可轉換為其子類的實例時將引發該異常,如下列代碼。

Object obj = new Integer(0);

String str = obj;

9、 java.lang.FileNotFoundException文件未找到異常

當程序試圖打開一個不存在的文件進行讀寫時將會引發該異常。該異常由FileInputStream,FileOutputStream,RandomAccessFile的構造器聲明拋出,即使被操作的文件存在,但是由於某些原因不可訪問,比如打開一個只讀文件進行寫入,這些構造方法仍然會引發異常。

10、java.lang.ArrayStoreException數組存儲異常

當試圖將類型不兼容類型的對象存入一個Object[]數組時將引發異常,如

Object[] obj = new String[3]

obj[0] = new Integer(0);

11、java.lang.NoSuchMethodException方法不存在異常

當程序試圖通過反射來創建對象,訪問(修改或讀取)某個方法,但是該方法不存在就會引發異常。

12、 java.lang.NoSuchFiledException方法不存在異常

當程序試圖通過反射來創建對象,訪問(修改或讀取)某個filed,但是該filed不存在就會引發異常。

13、 java.lang.EOFException文件已結束異常

當程序在輸入的過程中遇到文件或流的結尾時,引發異常。因此該異常用於檢查是否達到文件或流的結尾

14、java.lang.InstantiationException實例化異常

當試圖通過Class的newInstance()方法創建某個類的實例,但程序無法通過該構造器來創建該對象時引發。Class對象表示一個抽象類,介面,數組類,基本類型 。該Class表示的類沒有對應的構造器。

15、java.lang.InterruptedException被中止異常

當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。

16、java.lang.CloneNotSupportedException 不支持克隆異常

當沒有實現Cloneable介面或者不支持克隆方法時,調用其clone()方法則拋出該異常。

17、java.lang.OutOfMemoryException 內存不足錯誤

當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤。

18、java.lang.NoClassDefFoundException 未找到類定義錯誤

當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤。

違背安全原則異常:SecturityException

操作資料庫異常:SQLException

輸入輸出異常:IOException

通信異常:SocketException

以上便是Java常見的幾種異常,希望各位同學都能編譯出完美的代碼,笑隱竹林中!編碼bug,江湖永無相見!

java中常見的幾種異常

1、空指針異常類:NullPointerException

調用了未經初始化的對象或者是不存在的對象。經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針, 即把數組的初始化和數組元素的初始化混淆起來了。

數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化, 依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)。

2、數據類型轉換異常:java.lang.ClassCastException

當試圖將對某個對象強制執行向下轉型,但該對象又不可轉換又不可轉換為其子類的實例時將引發該異常,如下列代碼。

Object obj = new Integer(0);

String str = obj;

3、沒有訪問許可權:java.lang.IllegalAccessException

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

4、方法的參數錯誤:java.lang.IllegalArgumentException

比如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。

5、數組下標越界異常:java.lang.IndexOutOfBoundsException

查看調用的數組或者字元串的下標值是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了。

還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候先查看一下數組的length,以免出現這個異常。

6、文件已結束異常:EOFException

當程序在輸入的過程中遇到文件或流的結尾時,引發異常。因此該異常用於檢查是否達到文件或流的結尾

7、文件未找到異常:FileNotFoundException

當程序試圖打開一個不存在的文件進行讀寫時將會引發該異常。該異常由FileInputStream,FileOutputStream,RandomAccessFile的構造器聲明拋出,即使被操作的文件存在,但是由於某些原因不可訪問,比如打開一個只讀文件進行寫入,這些構造方法仍然會引發異常。

8、字元串轉換為數字異常:NumberFormatException

當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常.如現在講字元型的數據「123456」轉換為數值型數據時,是允許的。

但是如果字元型數據中包含了非數字型的字元,如123#56,此時轉換為數值型時就會出現異常。系統就會捕捉到這個異常,並進行處理。

9、指定的類不存在: java.lang.ClassNotFoundException

這裡主要考慮一下類的名稱和路徑是否正確即可,通常都是程序試圖通過字元串來載入某個類時可能引發異常。比如:調用Class.forName;或者調用ClassLoad的finaSystemClass;或者LoadClass;

10、實例化異常:java.lang.InstantiationException

當試圖通過Class的newInstance方法創建某個類的實例,但程序無法通過該構造器來創建該對象時引發。Class對象表示一個抽象類,介面,數組類,基本類型 。該Class表示的類沒有對應的構造器。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KNVY的頭像KNVY
上一篇 2024-10-04 00:01
下一篇 2024-10-04 00:01

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論