Java基礎 - 異常

Exception vs Error

一個形象的比喻

假如你開車上山楼誓,車壞了把兔,你拿出工具箱修一修,修好繼續(xù)上路(Exception被捕獲瓮顽,從異常中恢復县好,繼續(xù)程序的運行),車壞了暖混,你不知道怎么修缕贡,打電話告訴修車行,告訴你是什么問題拣播,要車行過來修晾咪。(在當前的邏輯背景下,你不知道是怎么樣的處理邏輯贮配,把異常拋出去到更高的業(yè)務層來處理)谍倦。你打電話的時候,要盡量具體牧嫉,不能只說我車動不了了剂跟。那修車行很難定位你的問題。(要補貨特定的異常酣藻,不能捕獲類似Exception的通用異常)曹洽。還有一種情況是,你開車上山辽剧,山塌了送淆,這你還能修嗎?(Error:導致你的運行環(huán)境進入不正常的狀態(tài)怕轿,很難恢復)

NoClassDefFoundError 與 ClassNotFoundException 區(qū)別

  • NoClassDefFoundError -> Error 會導致程序處于非正常狀態(tài)偷崩,不可捕獲
  • ClassNotFoundException -> Exception 可捕獲,編譯期可檢查Exception,需要顯示的捕獲(補充:Exception 分為(在編譯期)可檢查和不可檢查的Exception撞羽,編譯期可檢查Exception,需要顯示的捕獲阐斜;編譯期不可檢查的Exception就是所謂的運行時異常(RuntimeException: NullPointException),需要根據具體情況進行捕獲處理)

throw诀紊、throws 關鍵字

  • throw 拋出一個異常谒出,寫在方法body體中,修飾一個異常實例
  • throws 定義一個異常,類似try-catch-throw,寫在方法簽名/類名之后邻奠,修飾方法/類

try-catch-finally

異常捕獲需要注意

  • 盡量不要捕獲類似Exception的通用異常笤喳,應該捕獲特定異常
  • 不要生吞異常,發(fā)生異常的時候碌宴,盡量提供更多異常cause信息并記錄到日志中杀狡,盡量不要輸出全部堆棧信息到console中,這樣做不僅影響程序性能而且在復雜系統中很難定位問題

自定異常需要注意

  • 是否要定義成Checked Exception ( eg : IOException), 這種異常的設計初衷是為了從異常情況中恢復贰镣,設計者應該有足夠的信息對異常進行分類
  • 信息安全: 在保證診斷信息足夠的同時呜象,需要避免包含敏感信息膳凝,避免潛在的安全問題。(eg: java.net.ConnectException 的出錯信息Connection refused (Connection refused)并不包含具體的機器名恭陡,IP鸠项,密碼等)

性能角度看Java異常處理機制

  • try-catch代碼塊會影響JVM對代碼進行優(yōu)化,所以會產生額外的性能開銷子姜,建議僅捕獲有不要的代碼段,不要一個try包住整段代碼楼入。此外哥捕,不要用try-catch來控制程序流程,因為它遠比條件語句 (if-else /switch) 要低效
  • Java 每實例化一個Exception都需要對當前的棧進行快照嘉熊,這是一個比較重的操作遥赚,如果發(fā)生頻繁,這個開銷就不能被忽略了

參考

https://time.geekbang.org/column/article/6849

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末阐肤,一起剝皮案震驚了整個濱河市凫佛,隨后出現的幾起案子,更是在濱河造成了極大的恐慌孕惜,老刑警劉巖愧薛,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異衫画,居然都是意外死亡毫炉,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門削罩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞄勾,“玉大人,你說我怎么就攤上這事弥激〗福” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我坎缭,道長妇智,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任虫埂,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘喳资。我一直安慰自己,他們只是感情好腾供,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布仆邓。 她就那樣靜靜地躺著鲜滩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪节值。 梳的紋絲不亂的頭發(fā)上徙硅,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音搞疗,去河邊找鬼嗓蘑。 笑死,一個胖子當著我的面吹牛匿乃,可吹牛的內容都是我干的桩皿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幢炸,長吁一口氣:“原來是場噩夢啊……” “哼泄隔!你這毒婦竟也來了?” 一聲冷哼從身側響起宛徊,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佛嬉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闸天,有當地人在樹林里發(fā)現了一具尸體暖呕,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年苞氮,在試婚紗的時候發(fā)現自己被綠了缰揪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡葱淳,死狀恐怖钝腺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情赞厕,我是刑警寧澤艳狐,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站皿桑,受9級特大地震影響毫目,放射性物質發(fā)生泄漏。R本人自食惡果不足惜诲侮,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一镀虐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沟绪,春花似錦刮便、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辈毯。三九已至,卻和暖如春搜贤,著一層夾襖步出監(jiān)牢的瞬間谆沃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工仪芒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唁影,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓掂名,卻偏偏與公主長得像夭咬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铆隘,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • “簡單不先于復雜,而是在復雜之后.” —— Alan Perlis Java異常 異常指不期而至的各種狀況南用,如:文...
    白襯衫少年閱讀 274評論 0 0
  • 目錄:一膀钠、 異常繼承體系二、 發(fā)生異常到時候裹虫,程序的執(zhí)行特征:三肿嘲、 異常與錯誤的區(qū)別四、 拋出異常 throw五筑公、...
    千面嬌你妹的娃閱讀 373評論 1 2
  • JAVA異常與異常處理詳解 一雳窟、異常簡介 什么是異常? 異常就是有異于常態(tài)匣屡,和正常情況不一樣封救,有錯誤出錯。在jav...
    java大濕兄閱讀 998評論 0 11
  • 異常捣作,說起來誉结,就是一張圖,5個關鍵字券躁。 一張圖惩坑, 5個關鍵字 try catch finally throw th...
    阿敏其人閱讀 596評論 0 2
  • 什么是異常 異常(exception)是指程序在運行過程中,出現了意外的事件也拜,使得程序沒有按我們預期正常執(zhí)行以舒。出現...
    swz_android閱讀 355評論 0 1