摘要:由虛擬機生成并拋出,,屬于系統(tǒng)內(nèi)部錯誤或者資源耗盡等嚴重情況,屬于需要擔負的責任,這一類異常事件是無法恢復或者不可能捕獲的,將導致應用程序中斷,但是自定義是可以捕獲的。
題目
答案:D
分析 Java 異常的結(jié)構(gòu)體系Throwable 類包含了其線程創(chuàng)建時線程執(zhí)行堆棧的快照,包含了給出有關錯誤更多的消息字符串,
有顏色的代表運行時異常,非checked exception,可以不try catch ,則由jvm處理,白色的異常代表checked exceptions必須由try-catch捕獲。
非runtimeException 一般是外部錯誤,例如:從文件尾后讀取數(shù)據(jù),這并不是程序本身的錯誤,而是應用環(huán)境的錯誤,凡是繼承Throwable的,都可以捕獲,拋出。
ERRORError由虛擬機生成并拋出,,屬于JVM系統(tǒng)內(nèi)部錯誤或者資源耗盡等嚴重情況,屬于JVM需要擔負的責任,這一類異常事件是無法恢復或者不可能捕獲的,將導致應用程序中斷,但是自定義Error是可以捕獲的。
package com.mousycoder.error; public class MyError extends Error{ public MyError() { super(); } MyError(String msg) { super(msg); } public static void main(String[] args) { try { throw new MyError("error"); } catch (Throwable e) { System.out.println("catching!"); } } }異常機制
傳統(tǒng)異常是由函數(shù)返回一個特殊的結(jié)果表示,例如: -1表示異常,有時候 -1確是表示正確的值,這樣代碼可讀性差,正確的處理和異常處理代碼在一起,異常則由程序員來處理,要求比較高,經(jīng)過改良之后,程序出現(xiàn)異常,則程序流程發(fā)生改變,控制權(quán)轉(zhuǎn)到異常處理器,由異常處理器處理,異常處理器也是有很多的,直到找到一個適合的異常處理器,并處理異常。
異常的轉(zhuǎn)譯ERROR到Exception
比如講SQLException轉(zhuǎn)成DAOException,讓異常更加準確的表達
package com.mousycoder.error; import java.sql.SQLException; public class DAOException extends Throwable{ public DAOException() { super(); } DAOException(String msg,Throwable e){ super(msg, e); } public static void main(String[] args) throws DAOException { SQLException s = new SQLException(); throw new DAOException("dao異常",s); } }
console
Exception in thread "main" com.mousycoder.error.DAOException: dao異常 at com.mousycoder.error.DAOException.main(DAOException.java:16) Caused by: java.sql.SQLException at com.mousycoder.error.DAOException.main(DAOException.java:15)
Spring中DispatcherServlet的doDispatch()方法將Error轉(zhuǎn)成Exception,挽回錯誤發(fā)生帶來的負面影響。
private void triggerAfterCompletionWithError(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler, Error error) throws Exception, ServletException { ServletException ex = new NestedServletException("Handler processing failed", error); if (mappedHandler != null) { mappedHandler.triggerAfterCompletion(request, response, ex); } throw ex; }
Exception到RuntimeException
將檢查異常轉(zhuǎn)成非檢查異常,讓代碼變得優(yōu)雅,但是增加了系統(tǒng)發(fā)生系統(tǒng)的可能性
Error到RuntimeException
代碼簡潔,統(tǒng)一異常處理
異常鏈將異常的原因一個一個串起來,底層信息傳給上層,逐級傳遞
模型:
try { lowLevelOp(); } catch (LowLevelException le) { throw (HighLevelException) new HighLevelException().initCause(le); }
感謝您的耐心閱讀,如果您發(fā)現(xiàn)文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,你的鼓勵是作者寫作最大的動力,
如果您認為本文質(zhì)量不錯,讀后覺得收獲很大,不妨小額贊助我一下,讓我更有動力繼續(xù)寫出高質(zhì)量的文章。
支付寶
微信
作 者 : @mousycoder
原文出處 : http://mousycoder.com/2015/10/14/thinking-of-interview-question-2/
創(chuàng)作時間:2015-9-22
更新時間:2015-10-14
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64547.html
摘要:想必面試題刷的多的同學對下面這道題目不陌生,能夠立即回答出輸出個,可是你真的懂為什么嗎為什么是輸出為什么是輸出個這兩個問題在我腦邊縈繞。同步任務都好理解,一個執(zhí)行完執(zhí)行下一個。本文只是我對這道面試題的一點思考,有誤的地方望批評指正。 想必面試題刷的多的同學對下面這道題目不陌生,能夠立即回答出輸出10個10,可是你真的懂為什么嗎?為什么是輸出10?為什么是輸出10個10?這兩個問題在我腦...
摘要:直接開始題目是厲害了說句實話開發(fā)中誰寫成這樣保證會被打死。不過面試就是面試,有面試官的考量點。官方是這么說的。結(jié)果完美,不過小姐姐的意思是數(shù)組的方法會自動觸發(fā)數(shù)組的。 直接開始題目是 if(a==1 && a==2 && a==3){ alert(厲害了) } 說句實話開發(fā)中誰寫成這樣保證會被打死。 不過面試就是面試,有面試官的考量點。 我理解的點有兩個 1、隱式類型轉(zhuǎn)換 先說...
摘要:另一個問題,就是我下面要提及的作用域問題,我當時思考的時間太久了這是回憶中的面試題實際略有差異,不糾結(jié)了說一下腳本的運行結(jié)果引用錯誤中給出的錯誤提示。 版權(quán)聲明:此文首發(fā)于我的簡書賬號人生還有多少個二十年,轉(zhuǎn)載請注明出處。 此處有幾百字嘮叨: 當天,我早早起床,跨越上百公里,高德導航,路人指點,跌跌撞撞到達招聘會現(xiàn)場,當時已是中午十二點半,吃了午餐(半瓶白開水),開始準備投遞...
摘要:首先,我先去上搜索了的定義運算符創(chuàng)建一個用戶定義的對象類型的實例或具有構(gòu)造函數(shù)的內(nèi)置對象的實例。 今天看到一道面試題,如下,問: 實例化 Person 過程中,Person返回什么(或者 p 等于什么)? function Person(name) { this.name = name return name; } let p = new Person(Tom); 說實...
摘要:下面我們來使用面向?qū)ο箢悎D這里就不再畫了首先面試題中所提到的我們都可以看成類,比如停車場是一個類吧,它里面的車位是一個類吧,攝像頭,屏幕。。。 以下是某場的一道面試題(大概): 1、一個停車場,車輛入場時,攝像頭記錄下車輛信息2、屏幕上顯示所接收的車輛的信息情況(車牌號)以及各層車位的車位余量3、停車場一共四層車位,其中的三層都為普通車位,還有一層為特殊車位(體現(xiàn)在停車計費價格上面的不...
閱讀 1863·2021-11-25 09:43
閱讀 1378·2021-11-22 15:08
閱讀 3802·2021-11-22 09:34
閱讀 3261·2021-09-04 16:40
閱讀 3210·2021-09-04 16:40
閱讀 573·2019-08-30 15:54
閱讀 1362·2019-08-29 17:19
閱讀 1790·2019-08-28 18:13