电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

帶你了解Java中的異常處理(上)

瀏覽:83日期:2022-08-27 08:21:30

當當當當當當,各位看官,好久不見,甚是想念。

今天我們來聊聊Java里的一個小妖精,那就是異常。

什么是異常?什么是異常處理?

異常嘛,顧名思義就是不正常,(逃),是Java程序運行時,發生的預料之外的事情,它阻止了程序按照程序員的預期正常執行。

異常處理,應該說異常處理機制,就是專門用來制服這個小妖精的法寶。Java中的異常處理機制能讓程序在異常發生時,按照代碼的預先設定的異常處理邏輯,針對性地處理異常,讓程序盡最大可能恢復正常并繼續執行,且保持代碼的清晰。

簡而言之,Java異常處理就是能讓我們主動迎擊可能到來的異常,并將它們以圓潤的方式處理掉。

還是先來看個小栗子,看看java里的異常長什么樣。

public class Test { public static void main(String args[]){ int i = 0 / 0; System.out.println('i = ' + i); }}

帶你了解Java中的異常處理(上)

別慌別慌,不要看到紅色提示就內心崩潰只想關掉IDE,來,抓緊我的手,帶你看清“異常”這個磨人的小妖精的真面目(滑稽)。

代碼里將0作為了分母,因此程序會發生算術異常,拋出一個異常后,如果沒有任何處理,默認會終止程序,所以后面的打印內容并沒有輸出。在異常內容里,有說明異常類型為:java.lang.ArithmeticException,也就是算術異常,后面跟著的是異常原因: / by zero,也就是說異常出現的原因是將0作為了分母,而且后面還有堆棧信息,指出了異常拋出的位置是在com.frank.chapter16.main.Test.main這個包下,Test類的第11行(這個行數如果跟你想的不一樣,不要在意,因為我的代碼開始之前還有一些不可描述的說明信息),因為只有一次方法調用,所以沒有很長的堆棧信息,看起來也很簡潔明了。

所以你看,其實異常也沒那么可怕吧,不僅給了異常原因,還告訴了你這個bug是出在第幾行,所以好好利用它,可以幫助你寫出更難以發現的bug,呸,說錯了,可以幫助你更容易找到bug(手動滑稽)。

如果不希望拋出異常后程序就結束,而是希望它繼續運行呢?那么就捕獲它。

如何使用異常處理

我們來把上面那個栗子改改:

public class Test { public static void main(String args[]){ try{ int i = 0 / 0; }catch (Exception e){ System.out.println('好像發生異常了,但是我不管,我還要繼續運行'); } System.out.println('運行完畢!'); }}

輸出如下:

好像發生異常了,但是我不管,我還要繼續運行運行完畢!

好的,很強勢,現在即使拋出了異常,程序也繼續運行了。異常就像是一頭野獸,但你一旦捕獲它,馴服它,就可以為你所用,為所欲為了。

try...catch...是常用的異常處理搭配,如果在try語句塊中發生了異常,如果剛好這個異常被捕獲到了,那么會直接跳到catch語句塊中,執行catch語句中的代碼,像上面的栗子里,因為對Exception類進行了捕獲處理,所以當它的子類異常java.lang.ArithmeticException被拋出來的時候,也能捕獲它。關于Exception類的結構層次關系,后面再做詳細介紹。

還有另外一種搭配方式,那就是try...catch...finally,finally語句塊比catch要強勢的多,前面說了catch語句塊必須要捕獲到了特定的Exception才會執行里面的代碼,如果catch的是ArithmeticException但是拋出的卻是空指針異常,那就不會被捕獲了,異常也就逃之夭夭了。這個時候,finally的優勢就展示出來了,不管拋出什么樣的異常,也不管是否拋出了異常,finally中的代碼都會被執行。所以一般的用法是在finally語句塊里釋放掉那些需要被釋放的資源,如socket連接,關閉io流,關閉數據庫連接等等。也就是說一般在finally中收拾try中拋出的爛攤子,心疼一秒finally,果然能者多勞啊。

當然,try...finally這樣的搭配也是ok的,需要注意的是,當try語句中發生了異常之后,在發生異常處之后的代碼將不會再執行,而是跳到相應的catchu或者finally中去。

public class Test { public static void main(String args[]){ try{ int i = 0 / 0; }catch (NullPointerException e) { System.out.println('這里捕獲空指針異常'); }catch (ArithmeticException e){ System.out.println('這里捕獲算術異常'); }finally { System.out.println('這里是finally'); } System.out.println('運行完畢!'); }}

 輸出如下:

這里捕獲算術異常這里是finally運行完畢!

在上面的代碼中,catch語句塊是可以同時使用多個的,第一個catch語句塊捕獲的是空指針異常,但由于拋出的是算術異常,所以沒有捕獲住,但被第二個catch捕獲到了,所以第二個catch語句塊中的代碼執行了。異常匹配是按照從上到下的順序進行匹配的,最后才執行finally中的代碼塊。關于try...catch...finally,還有一個很有趣的return問題,如果三個語句塊里都有return,最終返回結果會是怎樣呢?www.jb51.net/article/112427.htm這里做了詳細的說明,有興趣的話可以看一看

絕大多數情況下,finally中的代碼都是會被執行的,只有一種情況下,finally中的代碼不會被執行,那就是在try語句塊中結束掉了虛擬機(如:使用 System.exit(0); )。

關于異常,還有一個關鍵字需要介紹,那就是throw,使用throw可以主動拋出一個異常。看到這你也許會一臉懵逼,主動拋出???嫌異常不夠多,湊熱鬧不嫌事大??別急別急,中間一定有什么誤會,把刀放下,有話好好說。

throw關鍵字確實是用來拋出異常的,你可以這樣使用:

public class Test { public static void main(String args[]){ try{ throw new NullPointerException('聽說你很閑,給你拋個異常。'); }catch (NullPointerException e) { System.out.println('這里捕獲空指針異常,提示內容:' + e.getMessage()); e.printStackTrace(); } }}

輸出如下:

這里捕獲空指針異常,提示內容:聽說你很閑,給你拋個異常。java.lang.NullPointerException: 聽說你很閑,給你拋個異常。at com.frank.chapter16.main.Test.main(Test.java:11)

用throw關鍵字可以拋出任意類型的異常,當然,你想的話,還有拋Error,至于什么是Error,已經跟Exception的關系,將在下一篇里進行講解。暫時不用深究。

在throw異常的時候,可以加上拋出異常的原因,這樣可以更方便定位問題所在,當然,一般來說不會像栗子中這樣使用的,這里只是為了簡單起見。

到此為止,異常的上半篇已經講解完畢,在這一篇里,說明了什么是異常,什么是異常處理,以及如何使用異常處理機制。相信大家對這個小妖精有了初步的認識,下一篇中,將會講解Exception家族都有哪些成員,如何使用自定義異常,已經異常處理的實際使用中的正確姿勢。歡迎大家繼續關注,之后計劃每周兩篇以上的更新,如果有講解遺漏或者不好的地方,歡迎大家及時指出,共同進步!

以上就是帶你了解Java中的異常處理(上)的詳細內容,更多關于Java異常處理的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 新车测评网_网罗汽车评测资讯_汽车评测门户报道 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 杭州ROHS检测仪-XRF测试仪价格-百科 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 桥架-槽式电缆桥架-镀锌桥架-托盘式桥架 - 上海亮族电缆桥架制造有限公司 | 英语词典_成语词典_日语词典_法语词典_在线词典网 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | 合肥办公室装修 - 合肥工装公司 - 天思装饰 | 方源木业官网-四川木门-全国木门专业品牌 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 飞象网 - 通信人每天必上的网站| PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 浙江自考_浙江自学考试网| 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 |