亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > java中try語句和throw的區(qū)別

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

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

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

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

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

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

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

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

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

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

        try和throw的區(qū)別

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

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

        補(bǔ)充throws和catch語句

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

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

        小編舉例

        package book.exception;

        /**

        * 拋出異常和聲明異常

        * @author joe

        *

        */

        public class ThrowAndThrows {

        /**

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

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

        * @return 返回平方根

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

        * 或者字符串無法轉(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語句,將可能會(huì)出現(xiàn)的異常的代碼放在try塊內(nèi),將處理異常的代碼放在catch塊內(nèi),并指明catch能夠捕獲的異常的類型,當(dāng)異常被捕獲時(shí),執(zhí)行catch塊內(nèi)的語句。

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

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

      537257