Java異常處理

      網友投稿 667 2022-05-29

      1. Java 中異常分為哪些種類

      按照異常需要處理的時機分為編譯時異常(CheckedException)和運行時異常(RuntimeException)。只有java語言提供了Checked異常, Java 認為Checked異常都是可以被處理的異常,所以Java程序必須顯式處理Checked異常。如果程序沒有處理Checked異常,該程序在編譯時就會發生錯誤無法編譯。這體現了Java的設計哲學:沒有完善錯誤處理的代碼根本沒有機會被執行。對Checked異常處理方法有兩種:

      1當前方法知道如何處理該異常,則用try…catch塊來處理該異常。

      2當前方法不知道如何處理,則在定義該方法是聲明拋出該異常。

      運行時異常只有當代碼在運行時才發行的異常,編譯時不需要try catch。Runtime如除數是0和數組下標越界等,其產生頻繁,處理麻煩,若顯示申明或者捕獲將會對程序的可讀性和運行效率影響很大。所以由系統自動檢測并將它們交給缺省的異常處理程序。當然如果你有處理要求也可以顯示捕獲它們。

      2.調用下面的方法,得到的返回值是什么?

      public int getNum() { try { int a = 1/0; return 1; } catch (Exception e) { return 2: } finally{ return 3; }

      Java的異常處理

      1

      2

      3

      4

      5

      6

      7

      8

      9

      代碼在走到第3行的時候遇到了一個MathException

      ,這時第四行的代碼就不會執行了,代碼直接跳轉到catch語句中,走到第6行的時候,異常機制有這么一個原則如果在catch中遇到了return或者異常等能使該函數終止的話那么有finally 就必須先執行完finally代碼塊里面的代碼然后再返回值。因此代碼又跳到第8行,可惜第8行是一個return語句,那么這個時候方法就結束了,因此第6行的返回結果就無法被真正返回。如果finally僅僅是處理了一個釋放資源的操作,那么該道題最終返回的結果就是2。因此上面返回值是3。

      3.error和exception的區別?

      Error類和Exception類的父類都是Throwable類,他們的區別如下。

      Error類一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢出等。對于這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。

      Exception類表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該盡可能處理異常,使程序恢復運行,而不應該隨意終止異常。

      Exception類又分為運行時異常( Runtime Exception) 和受檢查的異常(Checked Exception

      ),運行時異常;ArithmaticException, llegalArgumentException,編譯能通過,但是一運行就終止了

      ,程序不會處理運行時異常,出現這類異常,程序會終止。而受檢查的異常,要么用try…catch

      捕獲,要么用throws字句聲明拋出,交給它的父類處理,否則編譯不會通過。

      4.Java異常處理機制

      Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,

      Throwable下面又派生了兩個子類: Error 和Exception,

      Error 表示應用程序本身無法克服和恢復的一種嚴重問題。

      Exception表示程序還能夠克服和恢復的問題,其中又分為系統異常和普通異常,系統異常是軟件本身缺陷所導致的問題,也就是軟件開發人員考慮不周所導致的問題,軟件使用者無法克服和恢復這種問題,但在這種問題下還可以讓 軟件系統繼續運行或者讓軟件死掉,例如,

      數組腳本越界(ArrayIndexOutOfBoundsException) ,

      空指針異常(NullPointerException),

      類轉換異常(ClassCastException) ;

      普通異常是運行環境的變化或異常所導致的問題,

      是用戶能夠克服的問題,例如,網絡斷線,硬盤空間不夠,發生這樣的異常后,程序不應該死掉。

      java為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try…catch處理或用throws聲明繼續拋給上層調用方法處理,所以普通異常也稱為checked異常,而系統異常可以處理也可以不處理,所以,編譯器不強制用try.catch處理或用throws聲明,所以系統異常也稱為unchecked異常。

      5.下面列舉幾個常見的RuntimeException

      (1) java.lang.NullPointerException 空指針異常;出現原因:調用了未經初始化的對象或者是不存在的對象。

      (2) java.lang.ClassNotFoundException 指定的類找不到;出現原因:類的名稱和路徑加載錯誤;通常都是程序

      試圖通過字符串來加載某個類時可能弓|發異常。

      (3) java.lang.NumberFormatException 字符串轉換為數字異常;出現原因:字符型數據中包含非數字型字符。

      (4) java.lang.IndexOutOfBoundsException 數組角標越界異常,常見于操作數組對象時發生。

      (5) java.lang.IIlegalArgumentException 方法傳遞參數錯誤。

      (6) java.lang.ClassCastException 數據類型轉換異常。

      (7)java.lang.NoClassDefFoundException 未找到類定義錯誤。

      (8) sQLException SQL異常,常見于操作數據庫時的SQL語句錯誤。

      (9) java.lang.InstantiationException 實例化異常。

      (10) java.lang.NoSuchMethodException 方法不存在異常。

      6. throw 和throws的區別

      throw:

      (1) throw語句用在方法體內表示拋出異常,由方法體內的語句處理。

      (2) throw是具體向外拋出異常的動作,所以它拋出的是一個異常實例, 執行throw一定是拋出了某種異常。

      throws:

      (1) throws語句是用在方法聲明后面,表示如果拋出異常,由該方法的調用者來進行異常的處理。

      (2) throws 主要是聲明這個方法會拋出某種類型的異常,讓它的使用者要知道需要捕獲的異常的類型。

      (3) throws 表示出現異常的一種可能性,并不一定會發生這種異常。

      7. final、 finally、 finalize 的區別?

      (1) final: 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。

      (2) finally: 異常處理語句結構的一部分,表示總是執行。

      (3) finalize: Object 類的一個方法,在垃圾回收器執行的時候會調用被回收對象的此方法,可以覆蓋此方法,提供垃圾收集時的其他資源回收,例如關閉文件等。該訪法更像是一個對象生命周期的臨終方法, 當該方法被系統調用則代表該對象即將“死亡”,但是需要注意的是,我們主動行為上去調用該方法并不會導致該對象“死亡”,這是一個被動的方法(其實就是回調方法),不需要我們調用。

      Java 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:CSS技術預覽版特性:基于OBS的存算分離
      下一篇:TL138-EVM開發板介紹
      相關文章
      亚洲熟妇无码AV在线播放| 亚洲AV日韩AV一区二区三曲| 精品国产亚洲一区二区三区在线观看| 久久久久久亚洲Av无码精品专口| 亚洲日本va中文字幕久久| 亚洲第一街区偷拍街拍| 亚洲熟妇无码av另类vr影视| 亚洲sss综合天堂久久久| 亚洲熟妇av一区二区三区下载 | 亚洲国产综合专区电影在线| 久久夜色精品国产亚洲AV动态图| 国产AV无码专区亚洲A∨毛片| 亚洲日韩小电影在线观看| 亚洲中文字幕无码不卡电影| 久久精品国产亚洲AV不卡| 浮力影院亚洲国产第一页| 久久亚洲欧洲国产综合| 久久久久亚洲AV成人网人人软件| 亚洲人AV永久一区二区三区久久| 亚洲午夜爱爱香蕉片| 在线观看亚洲天天一三视| 亚洲综合伊人久久大杳蕉| 精品国产亚洲一区二区三区| 亚洲国产精品高清久久久| 久久精品国产亚洲| 久久水蜜桃亚洲av无码精品麻豆| 亚洲白色白色永久观看| 亚洲国产美女视频| 亚洲精品二三区伊人久久| 亚洲综合色一区二区三区| 亚洲AV无码之国产精品| 亚洲国产精品人人做人人爱| 久久综合亚洲色HEZYO国产| 亚洲精品乱码久久久久久| 亚洲动漫精品无码av天堂| 亚洲av午夜成人片精品网站| 亚洲视频一区在线观看| 2020年亚洲天天爽天天噜| 亚洲Av永久无码精品黑人| 亚洲免费视频一区二区三区| 亚洲色大成网站www久久九|