日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java异常学习心得

發布時間:2025/5/22 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java异常学习心得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Java異常學習心得
??????????? 本文重在Java中異常機制的一些概念。寫本文的目的在于方便我很長時間后若是忘了這些東西可以通過這片文章迅速回憶起來。
??????????? 1. 異常機制
??????????? 1.1
??????????? 異常機制是指當程序出現錯誤后,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤后,程序執行的流程發生改變,程序的控制權轉移到異常處理器。
??????????? 1.2
??????????? 傳統的處理異常的辦法是,函數返回一個特殊的結果來表示出現異常(通常這個特殊結果是大家約定俗稱的),調用該函數的程序負責檢查并分析函數返回的結果。這樣做有如下的弊端:例如函數返回-1代表出現異常,但是如果函數確實要返回-1這個正確的值時就會出現混淆;可讀性降低,將程序代碼與處理異常的代碼混爹在一起;由調用函數的程序來分析錯誤,這就要求客戶程序員對庫函數有很深的了解。
??????????? 1.3 異常處理的流程
??????????? 1.3.1 遇到錯誤,方法立即結束,并不返回一個值;同時,拋出一個異常對象
??????????? 1.3.2 調用該方法的程序也不會繼續執行下去,而是搜索一個可以處理該異常的異常處理器,并執行其中的代碼
??????????? 2 異常的分類
??????????? 2.1 異常的分類
??????????? 2.1.1
??????????? 異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。
??????????? 2.1.2
??????????? Error和RuntimeException及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked)。
??????????? 2.2 每個類型的異常的特點
??????????? 2.2.1 Error體系
??????????? Error類體系描述了Java運行系統中的內部錯誤以及資源耗盡的情形。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。如果出現這種錯誤,除了盡力使程序安全退出外,在其他方面是無能為力的。所以,在進行程序設計時,應該更關注Exception體系。
??????????? 2.2.2 Exception體系
??????????? Exception體系包括RuntimeException體系和其他非RuntimeException的體系
??????????? 2.2.2.1 RuntimeException
??????????? RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。處理RuntimeException的原則是:如果出現RuntimeException,那么一定是程序員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。
??????????? 2.2.2.2 其他(IOException等等)
??????????? 這類異常一般是外部錯誤,例如試圖從文件尾后讀取數據等,這并不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。
??????????? 2.3 與C++異常分類的不同
??????????? 2.3.1
??????????? 其實,Java中RuntimeException這個類名起的并不恰當,因為任何異常都是運行時出現的。(在編譯時出現的錯誤并不是異常,換句話說,異常就是為了解決程序運行時出現的的錯誤)。
??????????? 2.3.2
??????????? C++中logic_error與Java中的RuntimeException是等價的,而runtime_error與Java中非RuntimeException類型的異常是等價的。
??????????? 3 異常的使用方法
??????????? 3.1 聲明方法拋出異常
??????????? 3.1.1 語法:throws(略)
??????????? 3.1.2 為什么要聲明方法拋出異常?
??????????? 方法是否拋出異常與方法返回值的類型一樣重要。假設方法拋出異常確沒有聲明該方法將拋出異常,那么客戶程序員可以調用這個方法而且不用編寫處理異常的代碼。那么,一旦出現異常,那么這個異常就沒有合適的異常控制器來解決。
??????????? 3.1.3 為什么拋出的異常一定是已檢查異常?
??????????? RuntimeException與Error可以在任何代碼中產生,它們不需要由程序員顯示的拋出,一旦出現錯誤,那么相應的異常會被自動拋出。而已檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調用會拋出異常的庫函數(庫函數的異常由庫程序員拋出);客戶程序員自己使用throw語句拋出異常。遇到Error,程序員一般是無能為力的;遇到RuntimeException,那么一定是程序存在邏輯錯誤,要對程序進行修改(相當于調試的一種方法);只有已檢查異常才是程序員所關心的,程序應該且僅應該拋出或處理已檢查異常。
??????????? 3.1.4
??????????? 注意:覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻并不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。
??????????? 3.2 如何拋出異常
??????????? 3.2.1 語法:throw(略)
??????????? 3.2.2 拋出什么異常?
??????????? 對于一個異常對象,真正有用的信息時異常的對象類型,而異常對象本身毫無意義。比如一個異常對象的類型是ClassCastException,那么這個類名就是唯一有用的信息。所以,在選擇拋出什么異常時,最關鍵的就是選擇異常的類名能夠明確說明異常情況的類。
??????????? 3.2.3
??????????? 異常對象通常有兩種構造函數:一種是無參數的構造函數;另一種是帶一個字符串的構造函數,這個字符串將作為這個異常對象除了類型名以外的額外說明。
??????????? 3.2.4
??????????? 創建自己的異常:當Java內置的異常都不能明確的說明異常情況的時候,需要創建自己的異常。需要注意的是,唯一有用的就是類型名這個信息,所以不要在異常類的設計上花費精力。
??????????? 3.3 捕獲異常
??????????? 如果一個異常沒有被處理,那么,對于一個非圖形界面的程序而言,該程序會被中止并輸出異常信息;對于一個圖形界面程序,也會輸出異常的信息,但是程序并不中止,而是返回用戶界面處理循環中。
??????????? 3.3.1 語法:try、catch和finally(略)
??????????? 控制器模塊必須緊接在try塊后面。若擲出一個異常,異常控制機制會搜尋參數與異常類型相符的第一個控制器隨后它會進入那個catch
??????????? 從句,并認為異常已得到控制。一旦catch 從句結束對控制器的搜索也會停止。
??????????? 3.3.1.1 捕獲多個異常(注意語法與捕獲的順序)(略)
??????????? 3.3.1.2 finally的用法與異常處理流程(略)
??????????? 3.3.2 異常處理做什么?
??????????? 對于Java來說,由于有了垃圾收集,所以異常處理并不需要回收內存。但是依然有一些資源需要程序員來收集,比如文件、網絡連接和圖片等資源。
??????????? 3.3.3 應該聲明方法拋出異常還是在方法中捕獲異常?
??????????? 原則:捕捉并處理哪些知道如何處理的異常,而傳遞哪些不知道如何處理的異常
??????????? 3.3.4 再次拋出異常
??????????? 3.3.4.1 為什么要再次拋出異常?
??????????? 在本級中,只能處理一部分內容,有些處理需要在更高一級的環境中完成,所以應該再次拋出異常。這樣可以使每級的異常處理器處理它能夠處理的異常。
??????????? 3.3.4.2 異常處理流程
??????????? 對應與同一try塊的catch塊將被忽略,拋出的異常將進入更高的一級。
??????????? 4 關于異常的其他問題
??????????? 4.1 過度使用異常
??????????? 首先,使用異常很方便,所以程序員一般不再愿意編寫處理錯誤的代碼,而僅僅是簡簡單單的拋出一個異常。這樣做是不對的,對于完全已知的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。另外,異常機制的效率很差。
??????????? 4.2 將異常與普通錯誤區分開
??????????? 對于普通的完全一致的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。只有外部的不能確定和預知的運行時錯誤才需要使用異常。
??????????? 4.3 異常對象中包含的信息
??????????? 一般情況下,異常對象唯一有用的信息就是類型信息。但使用異常帶字符串的構造函數時,這個字符串還可以作為額外的信息。調用異常對象的getMessage()、toString()或者printStackTrace()方法可以分別得到異常對象的額外信息、類名和調用堆棧的信息。并且后一種包含的信息是前一種的超集。
原文鏈接: http://www.dlog.cn/nicholascoder/diary/9369

轉載于:https://my.oschina.net/moroseyu/blog/51390

總結

以上是生活随笔為你收集整理的Java异常学习心得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆高清 | 成人免费一区二区三区 | 欧美三级网站 | 潮喷失禁大喷水aⅴ无码 | 69精品久久 | 18成人免费观看视频 | 色黄网站在线观看 | 国产超碰人人模人人爽人人添 | 手机在线免费看av | 男生桶女生肌肌 | 三级91| 国产乱码精品一区二区三 | 亚洲国产精品成人午夜在线观看 | 91视频网址 | 69成人免费视频 | 大桥未久恸哭の女教师 | 中国一极毛片 | 久久久久一 | 在线观看的黄网 | 日韩激情在线视频 | wwwwww日本 | 日韩少妇诱惑 | 大陆熟妇丰满多毛xxxⅹ | 夜夜操av | 人体内射精一区二区三区 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 亚洲日本黄色 | 涩涩小网站 | 国产精品一区二区三区高潮 | 伦理片一区二区 | 成人一级视频在线观看 | 国产第一色 | 黄网站色 | 天天爱天天舔 | 日韩一区二区三区在线观看 | 久久久亚洲欧洲 | 久久久久一区二区精码av少妇 | 午夜寂寞自拍 | youjizz中国少妇 | www.日本在线观看 | 中文字幕你懂的 | 一级黄色在线播放 | 亚洲成人少妇 | 亚洲精品综合久久 | 人乳喂奶hd无中字 | 91精品啪在线观看国产 | 香蕉久久精品日日躁夜夜躁 | 亚洲毛片在线看 | 天堂网www在线 | 四虎色 | 亚洲av久久久噜噜噜熟女软件 | 国产主播自拍av | 黄色特级视频 | 日本一级网站 | 日韩深夜福利 | 不卡av一区| 亚洲性生活视频 | 91精品视频一区二区三区 | 免费看欧美黑人毛片 | 男生操女生屁股 | 国产av毛片| 就要操就要日 | 成人做爰视频www网站小优视频 | 91久久精品无码一区二区 | 精品不卡一区 | 摸大乳喷奶水www视频 | 在线国产欧美 | 精品久久久久久久久久久久 | 欧美黑人猛交 | 农村少妇无套内谢粗又长 | 丁香网五月天 | 成人激情久久 | 欧美黑人欧美精品刺激 | 四虎精品在永久在线观看 | 日本精品免费在线观看 | 亚洲精品一二三 | 伊人一二三 | 欧美整片在线 | 尤果网福利视频在线观看 | 国产妻精品一区二区在线 | 黄色国产毛片 | 在线小视频你懂的 | 午夜久草| 欧美另类videos | 国产精品扒开腿做爽爽爽a片唱戏 | 伊人青青久 | 中文资源在线播放 | 日韩精品无码一本二本三本色 | 美女啪啪网站 | 麻豆网页| 日韩国产欧美一区二区 | 国产一区二区成人 | 精品日韩制服无码久久久久久 | 中文字幕免费在线观看 | 天天干天天舔 | 欧美日韩一二 | 水果视频污 | 成年人免费高清视频 | 精品国产乱码久久久久久久 |