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