最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java編程中throw和throws子句的使用方法

 更新時(shí)間:2015年09月28日 16:33:03   投稿:goldensun  
這篇文章主要介紹了詳解Java編程中throw和throws子句的使用方法,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

Java throw:異常的拋出
程序可以用throw語(yǔ)句拋出明確的異常。Throw語(yǔ)句的通常形式如下:

 throw ThrowableInstance;


這里,ThrowableInstance一定是Throwable類類型或Throwable子類類型的一個(gè)對(duì)象。簡(jiǎn)單類型,例如int或char,以及非Throwable類,例如String或Object,不能用作異常。有兩種可以獲得Throwable對(duì)象的方法:在catch子句中使用參數(shù)或者用new操作符創(chuàng)建。

程序執(zhí)行在throw語(yǔ)句之后立即停止;后面的任何語(yǔ)句不被執(zhí)行。最緊緊包圍的try塊用來(lái)檢查它是否含有一個(gè)與異常類型匹配的catch語(yǔ)句。如果發(fā)現(xiàn)了匹配的塊,控制轉(zhuǎn)向該語(yǔ)句;如果沒(méi)有發(fā)現(xiàn),次包圍的try塊來(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

該程序還闡述了怎樣創(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定義的。

Java throws子句
如果一個(gè)方法可以導(dǎo)致一個(gè)異常但不處理它,它必須指定這種行為以使方法的調(diào)用者可以保護(hù)它們自己而不發(fā)生異常。做到這點(diǎn)你可以在方法聲明中包含一個(gè)throws子句。一個(gè) throws 子句列舉了一個(gè)方法可能拋出的所有異常類型。這對(duì)于除Error或RuntimeException及它們子類以外類型的所有異常是必要的。一個(gè)方法可以拋出的所有其他類型的異常必須在throws子句中聲明。如果不這樣做,將會(huì)導(dǎo)致編譯錯(cuò)誤。

下面是包含一個(gè)throws子句的方法聲明的通用形式:

type method-name(parameter-list) throws exception-list{
 // body of method
}

這里,exception-list是該方法可以拋出的以有逗號(hào)分割的異常列表。

下面是一個(gè)不正確的例子。該例試圖拋出一個(gè)它不能捕獲的異常。因?yàn)槌绦驔](méi)有指定一個(gè)throws子句來(lái)聲明這一事實(shí),程序?qū)⒉粫?huì)編譯。

// This program contains an error and will not compile.
class ThrowsDemo {
 static void throwOne() {
  System.out.println("Inside throwOne.");
  throw new IllegalAccessException("demo");
 }
 public static void main(String args[]) {
  throwOne();
 }
}

為編譯該程序,需要改變兩個(gè)地方。第一,需要聲明throwOne( )引發(fā)IllegalAccess Exception異常。第二,main( )必須定義一個(gè)try/catch 語(yǔ)句來(lái)捕獲該異常。正確的例子如下:

// This is now correct.
class ThrowsDemo {
 static void throwOne() throws IllegalAccessException {
  System.out.println("Inside throwOne.");
  throw new IllegalAccessException("demo");
 }
 public static void main(String args[]) {
  try {
   throwOne();
  } catch (IllegalAccessException e) {
   System.out.println("Caught " + e);
  }
 }
}

下面是例題的輸出結(jié)果:

inside throwOne
caught java.lang.IllegalAccessException: demo

相關(guān)文章

最新評(píng)論

二连浩特市| 庄河市| 南华县| 彝良县| 文山县| 南靖县| 吉木萨尔县| 奉化市| 大荔县| 松溪县| 汶川县| 吕梁市| 唐河县| 两当县| 邵阳县| 东至县| 资源县| 休宁县| 五指山市| 长子县| 淄博市| 湄潭县| 阿拉尔市| 嵊泗县| 泗水县| 南皮县| 扶余县| 宿松县| 南安市| 丰城市| 鹿邑县| 白城市| 广宗县| 深州市| 观塘区| 隆子县| 瑞丽市| 丘北县| 紫金县| 万山特区| 西城区|