六. 异常处理7.throw:异常的抛出
生活随笔
收集整理的這篇文章主要介紹了
六. 异常处理7.throw:异常的抛出
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
到目前為止,你只是獲取了被Java運(yùn)行時(shí)系統(tǒng)拋出的異常。然而,程序可以用throw語(yǔ)句拋出明確的異常。Throw語(yǔ)句的通常形式如下:
? ? throw ThrowableInstance;
這里,ThrowableInstance一定是Throwable類(lèi)類(lèi)型或Throwable子類(lèi)類(lèi)型的一個(gè)對(duì)象。簡(jiǎn)單類(lèi)型,例如int或char,以及非Throwable類(lèi),例如String或Object,不能用作異常。有兩種可以獲得Throwable對(duì)象的方法:在catch子句中使用參數(shù)或者用new操作符創(chuàng)建。
程序執(zhí)行在throw語(yǔ)句之后立即停止;后面的任何語(yǔ)句不被執(zhí)行。最緊緊包圍的try塊用來(lái)檢查它是否含有一個(gè)與異常類(lèi)型匹配的catch語(yǔ)句。如果發(fā)現(xiàn)了匹配的塊,控制轉(zhuǎn)向該語(yǔ)句;如果沒(méi)有發(fā)現(xiàn),次包圍的try塊來(lái)檢查,以此類(lèi)推。如果沒(méi)有發(fā)現(xiàn)匹配的catch塊,默認(rèn)異常處理程序中斷程序的執(zhí)行并且打印堆棧軌跡。
下面是一個(gè)創(chuàng)建并拋出異常的例子程序,與異常匹配的處理程序再把它拋出給外層的處理程序。
// Demonstrate throw.
class ThrowDemo {
? ? static void demoproc() {
? ?? ?try {
? ?? ?? ?throw new NullPointerException("demo");
? ?? ?} catch(NullPointerException e) {
? ?? ?? ?System.out.println("Caught inside demoproc.");
? ?? ?? ?throw e; // rethrow the exception
? ?? ?}
? ?}
? ?public static void main(String args[]) {
? ?? ?try {
? ?? ?? ?demoproc();
? ?? ?} catch(NullPointerException e) {
? ?? ?? ?System.out.println("Recaught: " + e);
? ?? ?}
? ?}
}
該程序有兩個(gè)機(jī)會(huì)處理相同的錯(cuò)誤。首先,main()設(shè)立了一個(gè)異常關(guān)系然后調(diào)用demoproc( )。 demoproc( )方法然后設(shè)立了另一個(gè)異常處理關(guān)系并且立即拋出一個(gè)新的NullPointerException實(shí)例,NullPointerException在下一行被捕獲。異常于是被再次拋出。下面是輸出結(jié)果:
Caught inside demoproc.
Recaught: java.lang.NullPointerException: demo?http://www.xyseo.net/
該程序還闡述了怎樣創(chuàng)建Java的標(biāo)準(zhǔn)異常對(duì)象,特別注意下面這一行:
? ?throw new NullPointerException("demo");
這里,new用來(lái)構(gòu)造一個(gè)NullPointerException實(shí)例。所有的Java內(nèi)置的運(yùn)行時(shí)異常有兩個(gè)構(gòu)造函數(shù):一個(gè)沒(méi)有參數(shù),一個(gè)帶有一個(gè)字符串參數(shù)。當(dāng)用到第二種形式時(shí),參數(shù)指定描述異常的字符串。如果對(duì)象用作 print( )或println( )的參數(shù)時(shí),該字符串被顯示。這同樣可以通過(guò)調(diào)用getMessage( )來(lái)實(shí)現(xiàn),getMessage( )是由Throwable定義的。
? ? throw ThrowableInstance;
這里,ThrowableInstance一定是Throwable類(lèi)類(lèi)型或Throwable子類(lèi)類(lèi)型的一個(gè)對(duì)象。簡(jiǎn)單類(lèi)型,例如int或char,以及非Throwable類(lèi),例如String或Object,不能用作異常。有兩種可以獲得Throwable對(duì)象的方法:在catch子句中使用參數(shù)或者用new操作符創(chuàng)建。
程序執(zhí)行在throw語(yǔ)句之后立即停止;后面的任何語(yǔ)句不被執(zhí)行。最緊緊包圍的try塊用來(lái)檢查它是否含有一個(gè)與異常類(lèi)型匹配的catch語(yǔ)句。如果發(fā)現(xiàn)了匹配的塊,控制轉(zhuǎn)向該語(yǔ)句;如果沒(méi)有發(fā)現(xiàn),次包圍的try塊來(lái)檢查,以此類(lèi)推。如果沒(méi)有發(fā)現(xiàn)匹配的catch塊,默認(rèn)異常處理程序中斷程序的執(zhí)行并且打印堆棧軌跡。
下面是一個(gè)創(chuàng)建并拋出異常的例子程序,與異常匹配的處理程序再把它拋出給外層的處理程序。
// Demonstrate throw.
class ThrowDemo {
? ? static void demoproc() {
? ?? ?try {
? ?? ?? ?throw new NullPointerException("demo");
? ?? ?} catch(NullPointerException e) {
? ?? ?? ?System.out.println("Caught inside demoproc.");
? ?? ?? ?throw e; // rethrow the exception
? ?? ?}
? ?}
? ?public static void main(String args[]) {
? ?? ?try {
? ?? ?? ?demoproc();
? ?? ?} catch(NullPointerException e) {
? ?? ?? ?System.out.println("Recaught: " + e);
? ?? ?}
? ?}
}
該程序有兩個(gè)機(jī)會(huì)處理相同的錯(cuò)誤。首先,main()設(shè)立了一個(gè)異常關(guān)系然后調(diào)用demoproc( )。 demoproc( )方法然后設(shè)立了另一個(gè)異常處理關(guān)系并且立即拋出一個(gè)新的NullPointerException實(shí)例,NullPointerException在下一行被捕獲。異常于是被再次拋出。下面是輸出結(jié)果:
Caught inside demoproc.
Recaught: java.lang.NullPointerException: demo?http://www.xyseo.net/
該程序還闡述了怎樣創(chuàng)建Java的標(biāo)準(zhǔn)異常對(duì)象,特別注意下面這一行:
? ?throw new NullPointerException("demo");
這里,new用來(lái)構(gòu)造一個(gè)NullPointerException實(shí)例。所有的Java內(nèi)置的運(yùn)行時(shí)異常有兩個(gè)構(gòu)造函數(shù):一個(gè)沒(méi)有參數(shù),一個(gè)帶有一個(gè)字符串參數(shù)。當(dāng)用到第二種形式時(shí),參數(shù)指定描述異常的字符串。如果對(duì)象用作 print( )或println( )的參數(shù)時(shí),該字符串被顯示。這同樣可以通過(guò)調(diào)用getMessage( )來(lái)實(shí)現(xiàn),getMessage( )是由Throwable定義的。
轉(zhuǎn)載于:https://www.cnblogs.com/ok932343846/p/6831828.html
總結(jié)
以上是生活随笔為你收集整理的六. 异常处理7.throw:异常的抛出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 02循环单链表
- 下一篇: 报表查询——自动刷新数据,双击明细打开关