<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 知識大全 > 知識百科 > 百科知識 > java中try語句和throw的區別

        java中try語句和throw的區別

        時間: 映芳735 分享

        java中try語句和throw的區別

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

          Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,并提供了良好的接口。在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。當一個方法出現異常后便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常并進行處理。

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

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

          throw語句用來明確地拋出一個“異常”。throws用來標明一個成員函數可能拋出的各種“異常”。

          Finally為確保一段代碼不管發生什么“異常”都被執行一段代碼。可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。

          每當遇到一個try語句,“異常”的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try語句。

          try和throw的區別

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

          throw:出現在方法體中,用于拋出異常。當方法在執行過程中遇到異常情況時,將異常信息封裝為異常對象,然后throw。

          補充throws和catch語句

          throws:出現在方法的聲明中,表示該方法可能會拋出的異常,允許throws后面跟著多個異常類型

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

          小編舉例

          package book.exception;

          /**

          * 拋出異常和聲明異常

          * @author joe

          *

          */

          public class ThrowAndThrows {

          /**

          * 計算一個數字的平方根

          * @param nStr 以字符串的形式提供數字

          * @return 返回平方根

          * @throws Exception 當用戶輸入的字符串為空,

          * 或者字符串無法轉換成數字,或者轉換成的數字小于0,都會拋出異常

          */

          public static double sqrt(String nStr) throws Exception {

          if (nStr == null) {

          //用trow關鍵字拋出異常,當異常被拋出時,程序會跳出該方法

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

          }

          double n = 0;

          try {

          n = Double.parseDouble(nStr);

          } catch(NumberFormatException e) {

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

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

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

          }

          if (n < 0 ){

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

          }

          return Math.sqrt(n);

          }

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

          try{

          ThrowAndThrows.sqrt("-124.56");

          } catch(Exception e) {

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

          //打印捕獲的異常的堆棧信息,從堆棧信息中可以發現異常發生的位置和原因

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

          e.printStackTrace();

          throw e; //不做進一步處理,將異常向外拋出

          }

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

          ThrowAndThrows.sqrt("-124.56");

          }

          }

          程序輸出結果:

          Got a Exception:輸入的字符串轉化成的數字必須大于0!

          java.lang.Exception: 輸入的字符串轉化成的數字必須大于0!

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

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

          Exception in thread "main" java.lang.Exception: 輸入的字符串轉化成的數字必須大于0!

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

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

          源碼分析:

          在main方法里,由于sqrt方法的聲明中有throws關鍵字,所以,在調用該方法時,必須對throws后面聲明的異常進行處置,處置的方法有兩種:

          (1)main方法處理該異常,使用try.....catch語句,將可能會出現的異常的代碼放在try塊內,將處理異常的代碼放在catch塊內,并指明catch能夠捕獲的異常的類型,當異常被捕獲時,執行catch塊內的語句。

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

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

        537257 主站蜘蛛池模板: 正在播放的国产A一片| 国产老熟女国语免费视频| 91久久性奴调教国产免费| 日本第一区二区三区视频| 亚洲国产精品日韩在线 | 西西午夜无码大胆啪啪国模| 日韩卡一卡2卡3卡4卡| 亚洲国产日韩在线视频| 手机无码人妻一区二区三区免费| 国产精品VA尤物在线观看| 中文一级毛片| av在线播放观看国产| 8x永久华人成年免费| 日韩熟女熟妇久久精品综合| 国产精品综合色区av| 欧洲精品码一区二区三区| 国产小嫩模无套中出视频| 国产精品伊人久久综合网| 午夜大片免费男女爽爽影院| 亚洲日本在线电影| 久久国产成人av蜜臀| 亚洲欧美国产另类视频| 国产最新精品系列第三页| 国产精品内射视频免费| 国产精品久久国产丁香花| 特级做a爰片毛片免费看无码| 蜜臀av性久久久久蜜臀aⅴ麻豆| 少妇内射高潮福利炮| 精品久久人人妻人人做精品| 免费大片黄国产在线观看| 被黑人玩得站不起来| 亚洲人成电影网站 久久影视| 久久婷婷五月综合色一区二区 | 日韩大片看一区二区三区| 精品日韩av在线播放| 国产视色精品亚洲一区二区| 377p日本欧洲亚洲大胆张筱雨| 亚洲一区二区国产精品视频| 国产重口老太和小伙| 琪琪777午夜理论片在线观看播放| 在线视频中文字幕二区|