成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java異常學習心得

開發 后端
本文是筆者Java異常學習的一些個人心得,重在介紹Java中異常機制的一些概念。希望能與大家共同分享一下。

  本文重在Java異常機制的一些概念,詳細介紹Java異常學習的個人心得。內容如下:

  一. 異常機制

  異常機制是指當程序出現錯誤后,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤后,程序執行的流程發生改變,程序的控制權轉移到異常處理器。

  1. 處理異常的辦法

  傳統的處理異常的辦法是,函數返回一個特殊的結果來表示出現異常(通常這個特殊結果是大家約定俗稱的),調用該函數的程序負責檢查并分析函數返回的結果。這樣做有如下的弊端:例如函數返回-1代表出現異常,但是如果函數確實要返回-1這個正確的值時就會出現混淆;可讀性降低,將程序代碼與處理異常的代碼混爹在一起;由調用函數的程序來分析錯誤,這就要求客戶程序員對庫函數有很深的了解。

  2. 異常處理的流程

  遇到錯誤,方法立即結束,并不返回一個值;同時,拋出一個異常對象

  調用該方法的程序也不會繼續執行下去,而是搜索一個可以處理該異常的異常處理器,并執行其中的代碼

  二. 異常的分類

  異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。

  Error和RuntimeException及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked)。

  1. 每個類型的異常的特點:

  (1)Error體系

  Error類體系描述了Java運行系統中的內部錯誤以及資源耗盡的情形。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。如果出現這種錯誤,除了盡力使程序安全退出外,在其他方面是無能為力的。所以,在進行程序設計時,應該更關注Exception體系。

  (2)Exception體系

  Exception體系包括RuntimeException體系和其他非RuntimeException的體系

  (3)RuntimeException

  RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。處理RuntimeException的原則是:如果出現RuntimeException,那么一定是程序員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。

  (4)其他(IOException等等)

  這類異常一般是外部錯誤,例如試圖從文件尾后讀取數據等,這并不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。

  2. 與C++異常分類的不同

  其實,Java中RuntimeException這個類名起的并不恰當,因為任何異常都是運行時出現的。(在編譯時出現的錯誤并不是異常,換句話說,異常就是為了解決程序運行時出現的的錯誤)。

  C++中logic_error與Java中的RuntimeException是等價的,而runtime_error與Java中非RuntimeException類型的異常是等價的。

#p#

  三. 異常的使用方法

  1. 為什么要聲明方法拋出異常?

  方法是否拋出異常與方法返回值的類型一樣重要。假設方法拋出異常確沒有聲明該方法將拋出異常,那么客戶程序員可以調用這個方法而且不用編寫處理異常的代碼。那么,一旦出現異常,那么這個異常就沒有合適的異常控制器來解決。

  2. 為什么拋出的異常一定是已檢查異常?

  RuntimeException與Error可以在任何代碼中產生,它們不需要由程序員顯示的拋出,一旦出現錯誤,那么相應的異常會被自動拋出。而已檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調用會拋出異常的庫函數(庫函數的異常由庫程序員拋出);客戶程序員自己使用throw語句拋出異常。遇到Error,程序員一般是無能為力的;遇到RuntimeException,那么一定是程序存在邏輯錯誤,要對程序進行修改(相當于調試的一種方法);只有已檢查異常才是程序員所關心的,程序應該且僅應該拋出或處理已檢查異常。

  注意:覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻并不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。

  3. 拋出什么異常?

  對于一個異常對象,真正有用的信息時異常的對象類型,而異常對象本身毫無意義。比如一個異常對象的類型是ClassCastException,那么這個類名就是***有用的信息。所以,在選擇拋出什么異常時,最關鍵的就是選擇異常的類名能夠明確說明異常情況的類。

  異常對象通常有兩種構造函數:一種是無參數的構造函數;另一種是帶一個字符串的構造函數,這個字符串將作為這個異常對象除了類型名以外的額外說明。

  創建自己的異常:當Java內置的異常都不能明確的說明異常情況的時候,需要創建自己的異常。需要注意的是,***有用的就是類型名這個信息,所以不要在異常類的設計上花費精力。

  4. 捕獲異常

  如果一個異常沒有被處理,那么,對于一個非圖形界面的程序而言,該程序會被中止并輸出異常信息;對于一個圖形界面程序,也會輸出異常的信息,但是程序并不中止,而是返回用戶界面處理循環中。

  5. 異常處理做什么?

  對于Java來說,由于有了垃圾收集,所以異常處理并不需要回收內存。但是依然有一些資源需要程序員來收集,比如文件、網絡連接和圖片等資源。

  6. 應該聲明方法拋出異常還是在方法中捕獲異常?

  原則:捕捉并處理哪些知道如何處理的異常,而傳遞哪些不知道如何處理的異常

  7. 再次拋出異常,為什么要再次拋出異常?

  在本級中,只能處理一部分內容,有些處理需要在更高一級的環境中完成,所以應該再次拋出異常。這樣可以使每級的異常處理器處理它能夠處理的異常。

  8. 異常處理流程

  對應與同一try塊的catch塊將被忽略,拋出的異常將進入更高的一級。

四. 關于異常的其他問題

  1. 過度使用異常

  首先,使用異常很方便,所以程序員一般不再愿意編寫處理錯誤的代碼,而僅僅是簡簡單單的拋出一個異常。這樣做是不對的,對于完全已知的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。另外,異常機制的效率很差。

  2. 將異常與普通錯誤區分開

  對于普通的完全一致的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。只有外部的不能確定和預知的運行時錯誤才需要使用異常。

  3. 異常對象中包含的信息

  一般情況下,異常對象***有用的信息就是類型信息。但使用異常帶字符串的構造函數時,這個字符串還可以作為額外的信息。調用異常對象的getMessage()、toString()或者printStackTrace()方法可以分別得到異常對象的額外信息、類名和調用堆棧的信息。并且后一種包含的信息是前一種的超集。

  附言:以上純屬筆者java異常學習的個人心得,稍微整理的,也許有點混亂,也沒有很好的邏輯順序,不過還是希望大家或多或少能夠從中得到自己的體會吧。

【編輯推薦】

  1. Java異常處理原理及應用
  2. 應用技巧:Java中的異常處理
  3. 網管辭典:Java-異常處理程序
  4. Java異常處理的優劣之道
  5. 全面掌握Java的異常處理機制
責任編輯:韓亞珊 來源: 豆豆網
相關推薦

2009-09-17 13:38:42

LINQ to XML

2009-11-06 17:31:03

Oracle密碼文件

2012-06-27 14:04:22

folly

2009-06-23 09:05:10

Seam框架JSF

2009-12-22 15:49:50

Linux系統文件鎖

2009-08-18 10:59:46

C#枚舉類型

2011-01-04 09:34:23

LambdaC#

2009-09-14 18:19:49

LINQ模糊查詢

2009-09-10 16:35:06

CCNA考試培訓

2009-07-15 18:11:17

MVC模式學習

2009-08-13 18:10:31

C#靜態構造函數

2010-06-17 18:31:12

繪制UML序列圖

2009-12-17 16:18:00

CCNP考試心得

2011-04-08 17:22:39

2009-06-17 14:36:02

學習Java心得

2011-07-05 17:52:41

PHP

2013-12-06 09:57:38

2014-03-02 15:46:30

2013-11-28 13:03:17

2009-06-17 17:09:02

Java異常Java斷言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久免费精品 | 亚洲啊v在线 | 中文字幕国产精品 | 日韩三片| www狠狠爱com| 国产91在线精品 | 中文字幕视频在线观看 | h视频在线免费看 | 久久久久久久久久久久久九 | 精品99久久久久久 | 中文字幕高清在线 | 一级无毛片 | 成人午夜视频在线观看 | 亚洲成av| 韩三级在线观看 | 色射综合 | 成人精品一区二区三区中文字幕 | 国产91中文 | av在线一区二区三区 | 特黄色一级毛片 | 9999国产精品欧美久久久久久 | 91精品国产乱码久久久久久久久 | 国产不卡一区 | 国产精品视频观看 | 国产原创在线观看 | 国产一区2区 | 福利视频二区 | 日韩视频一区 | 伊人久久成人 | 午夜影院视频 | 精品毛片在线观看 | 色av一区二区三区 | 91麻豆精品国产91久久久久久久久 | 国产一区亚洲 | 午夜久久久 | 国产一区二区麻豆 | 亚洲精品国产第一综合99久久 | 欧美日韩专区 | 91精品国产综合久久婷婷香蕉 | 国产精品一区二区三区久久 | 黄在线|