摘要:異常類有兩個主要的子類類和類。當(dāng)不支持請求的操作時(shí),拋出該異常。此異常由方法拋出,指示索引或者為負(fù),或者超出字符串的大小。線程沒有處于請求操作所要求的適當(dāng)狀態(tài)時(shí)拋出的異常。用非法索引訪問數(shù)組時(shí)拋出的異常。返回一個對象代表異常原因。
異常的定義
異常發(fā)生的原因有很多,比如:用戶輸入了非法數(shù)據(jù),要打開的文件不存在,或者JVM內(nèi)存溢出等。
異常又分為檢查性異常,這類異常再編譯時(shí)不能被忽略;運(yùn)行時(shí)異常,這類異常往往是在編譯前無法預(yù)料的。
Exception類和Error繼承于Throwable類。
所有的異常類是從java.lang.Exception類繼承的子類。
異常類有兩個主要的子類:IOException類和RuntimeException類。
java.lang包中定義了一些異常類。
運(yùn)行時(shí)異常類:
ArithmeticException:當(dāng)出現(xiàn)異常的運(yùn)算條件時(shí),拋出此異常。例如,一個整數(shù)"除以零"時(shí),拋出此類的一個實(shí)例。
UnsupportedOperationException:當(dāng)不支持請求的操作時(shí),拋出該異常。
StringIndexOutOfBoundsException:此異常由 String 方法拋出,指示索引或者為負(fù),或者超出字符串的大小。
NumberFormatException: 當(dāng)應(yīng)用程序試圖將字符串轉(zhuǎn)換成一種數(shù)值類型,但該字符串不能轉(zhuǎn)換為適當(dāng)格式時(shí),拋出該異常。
NullPointerException:當(dāng)應(yīng)用程序試圖在需要對象的地方使用 null 時(shí),拋出該異常。
IndexOutOfBoundsException:指示某排序索引(例如對數(shù)組、字符串或向量的排序)超出范圍時(shí)拋出。
IllegalThreadStateException:線程沒有處于請求操作所要求的適當(dāng)狀態(tài)時(shí)拋出的異常。
IllegalStateException:在非法或不適當(dāng)?shù)臅r(shí)間調(diào)用方法時(shí)產(chǎn)生的信號。
ArrayIndexOutOfBoundsException:用非法索引訪問數(shù)組時(shí)拋出的異常。如果索引為負(fù)或大于等于數(shù)組大小,則該索引為非法索引。
檢查性異常類:
ClassNotFoundException:應(yīng)用程序試圖加載類時(shí),找不到相應(yīng)的類,拋出該異常。
IllegalAccessException:拒絕訪問一個類的時(shí)候,拋出該異常。
InterruptedException:一個線程被另一個線程中斷,拋出該異常。
NoSuchMethodException:請求的方法不存在。
NoSuchFieldException:請求的變量不存在。
InstantiationException:當(dāng)試圖使用 Class 類中的 newInstance 方法創(chuàng)建一個類的實(shí)例,而指定的類對象因?yàn)槭且粋€接口或是一個抽象類而無法實(shí)例化時(shí),拋出該異常。
CloneNotSupportedException:當(dāng)調(diào)用 Object 類中的 clone 方法克隆對象,但該對象的類無法實(shí)現(xiàn) Cloneable 接口時(shí),拋出該異常。
public String getMessage():返回關(guān)于發(fā)生的異常的詳細(xì)信息。
public Throwable getCause():返回一個Throwable 對象代表異常原因。
public String toString():使用getMessage()的結(jié)果返回類的串級名字。
public Throwable fillInStackTrace():用當(dāng)前的調(diào)用棧層次填充Throwable 對象棧層次,添加到棧層次任何先前信息中。
public void printStackTrace():打印toString()結(jié)果和棧層次到System.err,即錯誤輸出流。
使用try和catch關(guān)鍵字可以捕獲異常,try/catch的語法如下:
try { // 程序代碼 } catch(ExceptionName e1) { //Catch 塊 }
Catch語句包含要捕獲異常類型的聲明。當(dāng)保護(hù)代碼塊中發(fā)生一個異常時(shí),try后面的catch塊就會被檢查。
如果發(fā)生的異常包含在catch塊中,異常會被傳遞到該catch塊,這和傳遞一個參數(shù)到方法是一樣。
多重異常捕獲
一個try代碼塊后面跟隨多個catch代碼塊:
try { // 程序代碼 } catch(異常類型1 異常的變量名1) { // 程序代碼 } catch(異常類型2 異常的變量名2) { // 程序代碼 } catch(異常類型3 異常的變量名3) { // 程序代碼 }
可以在ry語句后面添加任意數(shù)量的catch塊,如果保護(hù)代碼中發(fā)生異常,異常被拋給第一個catch塊。如果拋出異常的數(shù)據(jù)類型與ExceptionType1匹配,它在這里就會被捕獲,如果不匹配,它會被傳遞給第二個catch塊,直到異常被捕獲或者通過所有的catch塊。
finally關(guān)鍵字
finally關(guān)鍵字用來創(chuàng)建在try代碼塊后面執(zhí)行的代碼塊,無論是否發(fā)生異常,finally代碼塊中的代碼總會被執(zhí)行。
try { // 程序代碼 } catch(異常類型 異常的變量名) { // 程序代碼 } finally { // 程序代碼 }throws/throw關(guān)鍵字
如果一個方法沒有捕獲一個檢查性異常,那么該方法必須使用throws 關(guān)鍵字來聲明,也可以使用throw關(guān)鍵字拋出一個異常,無論它是新實(shí)例化的還是剛捕獲到的。
public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition }聲明自定義異常
所有異常都必須是Throwable的子類:
如果希望寫一個檢查性異常類,則需要繼承Exception類。
如果你想寫一個運(yùn)行時(shí)異常類,那么需要繼承RuntimeException 類。
class MyException extends Exception{ private double count; public MyException (double count) { this.count= count; } public double getCount() { return count; } }
一個異常類和其它任何類一樣,包含有變量和方法。
使用異常
public class CheckingAccount { private double balance; private int number; public CheckingAccount(int number) { this.number = number; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) throws MyException { if(amount <= balance) { balance -= amount; } else { double needs = amount - balance; throw new MyException(needs); } } public double getBalance() { return balance; } public int getNumber() { return number; } }
調(diào)用該類方法時(shí)候使用try/catch語句就行了。
try { withdraw(600.00); } catch (MyException e) { System.out.println("Sorry, but you are short $"+ e.getAmount()); e.printStackTrace(); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70166.html
摘要:不受檢查異常為編譯器不要求強(qiáng)制處理的異常,檢查異常則是編譯器要求必須處置的異常。潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適的異常處理器,則運(yùn)行時(shí)系統(tǒng)終止。異常處理涉及到五個關(guān)鍵字,分別是。 概念 程序運(yùn)行時(shí),發(fā)生的不被期望的事件,它阻止了程序按照程序員的預(yù)期正常執(zhí)行,這就是異常。 異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并...
摘要:異常也就是指程序運(yùn)行時(shí)發(fā)生錯誤,而異常處理就是對這些錯誤進(jìn)行處理和控制。有兩個重要的子類異常和錯誤,二者都是異常處理的重要子類,各自都包含大量子類。需要注意的是,一旦某個捕獲到匹配的異常類型,將進(jìn)入異常處理代碼。 1,異?,F(xiàn)象 程序錯誤分為三種:1,編譯錯誤;2,運(yùn)行時(shí)錯誤;3,邏輯錯誤。 編譯錯誤是因?yàn)槌绦驔]有遵循語法規(guī)則,編譯程序能夠自己發(fā)現(xiàn)并且提示我們錯誤的原因和位置,這...
摘要:可以被異常處理機(jī)制使用,是異常處理的核心。非檢測異常,在編譯時(shí),不會提示和發(fā)現(xiàn)異常的存在,不強(qiáng)制要求程序員處理這樣的異常。總體來說,語言的異常處理流程,從程序中獲取異常信息。處理運(yùn)行時(shí)異常,采用邏輯合理規(guī)避同時(shí)輔助處理。 目錄 什么是Java異常? 當(dāng)一個Exception在程序中發(fā)生的時(shí)候,JVM是怎么做的呢? 當(dāng)我們編寫程序的時(shí)候如何對待可能出現(xiàn)的異常呢? 正文 1. 什么是J...
摘要:下面是異常處理機(jī)制的語法結(jié)構(gòu)業(yè)務(wù)實(shí)現(xiàn)代碼輸入不合法如果執(zhí)行塊里業(yè)務(wù)邏輯代碼時(shí)出現(xiàn)異常,系統(tǒng)自動生成一個異常對象,該對象被提交給運(yùn)行時(shí)環(huán)境,這個過程被稱為拋出異常。 Java的異常機(jī)制主要依賴于try、catch、finally、throw和throws五個關(guān)鍵字, try關(guān)鍵字后緊跟一個花括號括起來的代碼塊(花括號不可省略),簡稱try塊,它里面放置可能引發(fā)異常的代碼 catch后對...
摘要:根據(jù)異常對象判斷是否存在異常處理。否則,范圍小的異常會因異常處理完成而無法處理。異常處理中使用作為異常的統(tǒng)一出口。 參考《第一行代碼java》《java程序設(shè)計(jì)教程》java中程序的錯誤有語法錯誤、語義錯誤。如果是語法性錯誤,在編譯時(shí)就可以檢查出來并解決。語義錯誤是在程序運(yùn)行時(shí)出現(xiàn)的,在編譯時(shí)沒有錯誤,但在運(yùn)行時(shí)可能會出現(xiàn)錯誤導(dǎo)致程序退出,這些錯誤稱為異常。在沒有異常處理的情況下,也即...
摘要:為可恢復(fù)的錯誤使用檢查型異常,為編程錯誤使用非檢查型錯誤。檢查型異常保證你對錯誤條件提供異常處理代碼,這是一種從語言到強(qiáng)制你編寫健壯的代碼的一種方式,但同時(shí)會引入大量雜亂的代碼并導(dǎo)致其不可讀。在編程中選擇檢查型異常還是運(yùn)行時(shí)異常。 異常處理是Java 開發(fā)中的一個重要部分。它是關(guān)乎每個應(yīng)用的一個非功能性需求,是為了處理任何錯誤狀況,比如資源不可訪問,非法輸入,空輸入等等。Java提供了...
閱讀 3261·2021-11-18 10:02
閱讀 1960·2021-09-22 10:54
閱讀 2999·2019-08-30 15:43
閱讀 2590·2019-08-30 13:22
閱讀 1587·2019-08-29 13:57
閱讀 1057·2019-08-29 13:27
閱讀 750·2019-08-26 14:05
閱讀 2536·2019-08-26 13:30