18禁网站免费,成年人黄色视频网站,熟妇高潮一区二区在线播放,国产精品高潮呻吟AV

學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > java中try語(yǔ)句和throw的區(qū)別

java中try語(yǔ)句和throw的區(qū)別

時(shí)間: 映芳735 分享

java中try語(yǔ)句和throw的區(qū)別

  在編程的時(shí)候往往會(huì)出現(xiàn)系統(tǒng)編譯時(shí)無(wú)法檢測(cè)到的錯(cuò)誤,可是在運(yùn)行時(shí)會(huì)出錯(cuò),如果在可能出錯(cuò)的地方拋出異常,那樣便嚴(yán)整了代碼的正確性.比如數(shù)組越界,分母為0,文件等。 編程中會(huì)用try語(yǔ)句和throw語(yǔ)句來(lái)對(duì)編程運(yùn)行過(guò)程中出現(xiàn)的異常情況進(jìn)行處理。那么這兩種有什么區(qū)別呢?下面小編帶你去了解一下。

  Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類(lèi),并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類(lèi)或其它子類(lèi)的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。

  Java的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來(lái)執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候你可以通過(guò)它的類(lèi)型來(lái)捕捉(catch)它,或最后(finally)由缺省處理器來(lái)處理。

  用try來(lái)指定一塊預(yù)防所有“異常”的程序。緊跟在try程序后面,應(yīng)包含一個(gè)catch子句來(lái)指定你想要捕捉的“異常”的類(lèi)型。

  throw語(yǔ)句用來(lái)明確地拋出一個(gè)“異常”。throws用來(lái)標(biāo)明一個(gè)成員函數(shù)可能拋出的各種“異常”。

  Finally為確保一段代碼不管發(fā)生什么“異常”都被執(zhí)行一段代碼??梢栽谝粋€(gè)成員函數(shù)調(diào)用的外面寫(xiě)一個(gè)try語(yǔ)句,在這個(gè)成員函數(shù)內(nèi)部寫(xiě)另一個(gè)try語(yǔ)句保護(hù)其他代碼。

  每當(dāng)遇到一個(gè)try語(yǔ)句,“異常”的框架就放到堆棧上面,直到所有的try語(yǔ)句都完成。如果下一級(jí)的try語(yǔ)句沒(méi)有對(duì)某種“異常”進(jìn)行處理,堆棧就會(huì)展開(kāi),直到遇到有處理這種“異常”的try語(yǔ)句。

  try和throw的區(qū)別

  try:出現(xiàn)在方法體中,它自身是一個(gè)代碼塊,表示嘗試執(zhí)行代碼塊的語(yǔ)句。如果在執(zhí)行過(guò)程中有某條語(yǔ)句拋出異常,那么代碼塊后面的語(yǔ)句將不被執(zhí)行。

  throw:出現(xiàn)在方法體中,用于拋出異常。當(dāng)方法在執(zhí)行過(guò)程中遇到異常情況時(shí),將異常信息封裝為異常對(duì)象,然后throw。

  補(bǔ)充throws和catch語(yǔ)句

  throws:出現(xiàn)在方法的聲明中,表示該方法可能會(huì)拋出的異常,允許throws后面跟著多個(gè)異常類(lèi)型

  catch:出現(xiàn)在try代碼塊的后面,自身也是一個(gè)代碼塊,用于捕獲異常try代碼塊中可能拋出的異常。catch關(guān)鍵字后面緊接著它能捕獲的異常類(lèi)型,所有異常類(lèi)型的子類(lèi)異常也能被捕獲。

  小編舉例

  package book.exception;

  /**

  * 拋出異常和聲明異常

  * @author joe

  *

  */

  public class ThrowAndThrows {

  /**

  * 計(jì)算一個(gè)數(shù)字的平方根

  * @param nStr 以字符串的形式提供數(shù)字

  * @return 返回平方根

  * @throws Exception 當(dāng)用戶(hù)輸入的字符串為空,

  * 或者字符串無(wú)法轉(zhuǎn)換成數(shù)字,或者轉(zhuǎn)換成的數(shù)字小于0,都會(huì)拋出異常

  */

  public static double sqrt(String nStr) throws Exception {

  if (nStr == null) {

  //用trow關(guān)鍵字拋出異常,當(dāng)異常被拋出時(shí),程序會(huì)跳出該方法

  throw new Exception("輸入的字符不能為空!");

  }

  double n = 0;

  try {

  n = Double.parseDouble(nStr);

  } catch(NumberFormatException e) {

  //將parseDouble方法可能拋出的異常NumberFormatException捕獲,

  //然后將捕獲的異常重新封裝并輸出

  throw new Exception("輸入的字符串必須能夠轉(zhuǎn)化成數(shù)字!", e);

  }

  if (n < 0 ){

  throw new Exception("輸入的字符串轉(zhuǎn)化成的數(shù)字必須大于0!");

  }

  return Math.sqrt(n);

  }

  public static void main(String[] args) throws Exception {

  try{

  ThrowAndThrows.sqrt("-124.56");

  } catch(Exception e) {

  //將sqrt方法聲明的可能拋出的Exception異常捕獲

  //打印捕獲的異常的堆棧信息,從堆棧信息中可以發(fā)現(xiàn)異常發(fā)生的位置和原因

  System.out.println("Got a Exception:" + e.getMessage());

  e.printStackTrace();

  throw e; //不做進(jìn)一步處理,將異常向外拋出

  }

  //將sqrt聲明了可能會(huì)拋出的異常向外拋出,必須在方法聲明中使用throws

  ThrowAndThrows.sqrt("-124.56");

  }

  }

  程序輸出結(jié)果:

  Got a Exception:輸入的字符串轉(zhuǎn)化成的數(shù)字必須大于0!

  java.lang.Exception: 輸入的字符串轉(zhuǎn)化成的數(shù)字必須大于0!

  at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

  at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

  Exception in thread "main" java.lang.Exception: 輸入的字符串轉(zhuǎn)化成的數(shù)字必須大于0!

  at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

  at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

  源碼分析:

  在main方法里,由于sqrt方法的聲明中有throws關(guān)鍵字,所以,在調(diào)用該方法時(shí),必須對(duì)throws后面聲明的異常進(jìn)行處置,處置的方法有兩種:

  (1)main方法處理該異常,使用try.....catch語(yǔ)句,將可能會(huì)出現(xiàn)的異常的代碼放在try塊內(nèi),將處理異常的代碼放在catch塊內(nèi),并指明catch能夠捕獲的異常的類(lèi)型,當(dāng)異常被捕獲時(shí),執(zhí)行catch塊內(nèi)的語(yǔ)句。

  (2)main方法不處理該異常,將異常向外層程序拋出。在方法聲明中使用throws關(guān)鍵字拋出異常,方法體中不需要使用try...catch語(yǔ)句。

  異常類(lèi)Exception的getMessage方法用來(lái)獲取一場(chǎng)的描述信息,printStackTrace方法用來(lái)打印異常的堆棧信息,通過(guò)堆棧信息能夠查明異常發(fā)生的原因和位置,在調(diào)試的時(shí)候常用。

537257