色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Java違例控制總結

瀏覽:82日期:2024-06-14 13:53:05
內容: Java違例控制 總結Java違例控制 本文主要討論Java中的違例控制,包括以下內容:1)什么是違例控制2)違例的概念3)Java中違例的類層次結構4)如何擲出和捕獲違例5)捕獲以后如何處理違例本文將通過深入以上細節,向你完整地展現Java中違例的全貌,使得你能夠在以后的程序編寫中得心應手地處理各種可能遭遇的情況。什么是違例控制簡單地說,違例控制就是在程序中提供給你這樣一種能力:1)監視程序中的異常情況2)當異常情況發生時,將控制權交給你自己編寫的違例控制代碼違例控制的流程在Java中,這些工作由以下關鍵字來完成:try,catch,throw,throws,finally,他們的基本代碼結構如下:try{ //代碼塊}catch(ExceptionType e){ //此違例類型的控制代碼}finally{ //清除回收等工作}首先執行try中包含的代碼塊,如果遇到執行錯誤,程序擲出(throw)一特定類型的違例,你捕捉到此違例并轉而執行catch中的違例控制代碼。最后,無論程序是否產生違例都必須執行finally中的代碼,其主要為一些變量清除、資源回收(1)等工作。違例的類層次結構 違例的類層次結構 首先讓我們來看看Throwable類,Sun是這樣來描述它的:The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause. Instances of two subclasses,Error and Exception,are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data). 從中我們可以看出:1)在Java中,違例對象必然是從Throwable中衍生出來的一個類的實例。2) Throwable包含兩個直接子類Error(錯誤)和Exception(違例)。3)我們可以創建自己的違例類,只要它是從Throwable或其子類中衍生出來即可(確切地講應該是從Exception或其子類中衍生出來,本文不準備詳細討論如何創建自己的違例類,你可以參考相關的資料)。Error類和Exception類Error表示那些由于異常情況引起的嚴重錯誤,我們不應去捕獲這類對象,它主要包括系統內部錯誤以及資源耗盡等情況。而Exception類表示那些你必須去捕捉并處理的情況。檢查違例(Checked Exceptions)和不檢查違例(Unchecked Exceptions)在Exception的子類中有一個非常重要的類:RuntimeException(2)。Java中將自它或者它的子類衍生出來的任何違例都稱作“不檢查違例(Unchecked Exceptions),自其他Exception子類衍生出來的違例都稱作“檢查違例(Checked Exceptions)(3)。不檢查違例包括的問題主要有:造型錯誤,數組越界存取,空指針訪問等,這些問題一般來說都是你程序編寫的問題。簡單地說,不檢查違例就是那些由編譯器來檢查而無需你程序中控制的違例。而檢查違例是指那些你必須處理的違例,否則編譯時會產生一個編譯錯誤。你可以選擇下面任意一種方法來處理它:1)捕獲違例:在try代碼塊后面緊跟catch處理代碼塊2)聲明違例:在方法簽名中用throws來通告可能會產生違例Throwable類的構造器和方法上面我們已經提到throwable是所有違例的超類,在這里我們就來分析一下它。Throwable類有四個構造器方法: Throwable() Throwable(String message) Throwable(String message,Throwable cause) Throwable(Throwable cause) 后兩個是在JDK1.4中新出現的方法,用來支持所謂的鏈式違例(chained exception)機制(4)。接著,我們來看看throwable的一些主要方法: fillInStackTrace() getStackTrace() printStackTrace() setStackTrace(StackTraceElement[] stackTrace) 這四個方法是用來處理StackTrace的,如果你對StackTrace不是很熟悉,你可以這樣理解它:就是當程序由于運行時錯誤終止時你在屏幕上看到的那些東西。 getLocalizedMessage() getMessage() 這兩個方法提供了訪問封裝在違例對象里的消息的接口。 toString() Throwable重載了Object類的toString方法,用來返回一個Throwable的簡短描述。 所有的違例對象都繼承了throwable類的以上方法,所以你可以在catch代碼塊中調用其中任意一個方法,比如你可以使用getMessage方法來顯示違例的詳細信息。 那到底違例是什么意思呢? 在此我們引用Campione,Walrath在《The Java Tutorial》(5)中的原話:The term exception is shorthand for the phrase 'exceptional event'. It can be defined as follows: Definition: An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.'每當一個方法中有異常情況發生,它就實例化一個違例對象并把控制權交給運行時系統來處理,這些工作都是由throw來完成的(也就是我們通常所說的擲出一個違例)。而且該違例對象一般保存有自己的類型以及違例發生時程序狀態等信息。處理違例由上可以看出,是由運行時系統來負責找出處理違例的代碼。每當違例發生后,運行時系統就開始向后搜索合適的違例控制器(catch代碼塊),比較的標準是:違例控制器中的違例類型必須是產生的違例類型或其超類。如果直到程序的結尾也沒有找到合適的控制器,程序自動終止。違例控制的優點相對于傳統的錯誤處理機制,違例控制具有以下優點:1)將錯誤處理代碼和常規代碼分開2)將錯誤交給調用棧處理,這就是所謂“將事情交給最合適的人來完成的思想3)通過將違例進行分類,可以讓我們很容易地看出錯誤的所在和原因違例控制的更多細節我們在前面說過,除了由Error類和RuntimeException類衍生出來的違例外,你必須在程序中控制(handle)或者聲明(declare)所有可能被擲出的違例,也就是所有的檢查違例都必須得到處理,否則編譯器就會對你亮起紅燈,拒絕編譯。捕獲違例選擇捕獲違例意味著你的程序中必須存在有catch程序塊,而且參數ExceptionType的類型必須是被擲出違例的類型,或者是其某一繼承鏈中的超類(supperclass)(6)。聲明違例如果在方法中會產生檢查違例,但你又未在此方法中提供此違例的違例控制,那么你就必須聲明此方法可能會擲出某特定違例,利用關鍵字throws就可以達到此目的。語法結構為(只列出方法的簽名signature部分):methodName(paramType param) throws ExceptionType到底方法中會擲出哪些違例呢?它包括你的方法中本身代碼擲出的違例,你調用的方法擲出的違例,甚至還包括你調用的方法中調用的其他方法擲出的違例,等等。總之,只要控制流還在你的方法范圍內,所有擲出的違例都是你必須考慮的。實例代碼/** *

Title:Except1.java

*

Description: Tested using JDK1.4.0 under Win2000 Professional

* @author Mac * @version 2002/9/9 */import java.lang.Thread;class Except1{public static void main(String[] args){ Except1 obj = new Except1(); try { //begin try block obj.myMethod();}catch(InterruptedException e){ System.err.println(“Handle exception here);} //end catch block} //end main void myMethod() throws InterruptedException{ Thread.currentThread().sleep(1000);} //end myMethod} //end class Except1在上面這個例子中,我們看到myMethod方法只是簡單地聲明自己會產生一個名為InterruptedException的違例(throws InterruptedException),而真正的處理違例部分延遲到了main方法(catch(InterruptedException e))中。運行這個例子,并回答以下問題,看你是否確實掌握了它。1、 如果去掉所有的違例控制代碼,會發生什么情況?按照提示一步步完善你的程序。2、 方法myMethod中的違例是怎么引起的?main方法中呢?3、 把catch(InterruptedException e)換成catch(Exception e)行不行?為什么?捕獲多個違例 此外,可在try代碼塊中捕獲多個違例類型,并分別對每種類型加以控制,每種類型對應于一個獨立的catch從句: try { //codes that might throw exceptions}catch(ExceptionType1 e1){ //actions do with e1}catch(ExceptionType2 e2){ //actions do with e2}catch(ExceptionType3 e3){ //actions do with e3}// …聲明多個違例能夠捕獲多個違例,當然也就可以聲明多個違例。比如在myMethod方法中就可以同時聲明四個違例: void myMethod() throws InterruptedException,MyException,HerException,OurException { //method code}finally從句前面我們已經講過,finally從句中的內容一定會被執行,無論是否有違例發生。我們可以利用這個特性,在finally從句中放置一些執行回收資源,內存釋放等功能的代碼。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd Java違例控制 總結Java違例控制 本文主要討論Java中的違例控制,包括以下內容:1)什么是違例控制2)違例的概念3)
標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲国产综合人成综合网站00 | 台湾三级在线播放 | 国产三级在线看 | 1024色淫免费视频 | 97超在线 | 男女乱淫视频 | 日韩国产在线 | 99久久国语露脸精品对白 | 欧美日韩精品一区二区三区视频播放 | 国产手机精品视频 | 在线日韩视频 | 波多野结衣免费观看视频 | 萌白酱白丝护士服喷水铁牛tv | 国产页| 亚洲字幕波多野结衣作品 | 免费的三级网站 | 玖玖国产在线观看 | 日韩美女一级片 | 亚洲社区在线 | 亚洲在线影院 | 中文字幕在线永久 | www国产视频 | 国产精品欧美亚洲韩国日本 | 五月久久噜噜噜色影 | 国产成人精品999在线观看 | 久草在线资源视频 | 五月久久噜噜噜色影 | 亚洲美女影院 | 欧美日韩在线视频一区 | 亚洲一级毛片中文字幕 | 中国一级做a爱片免费 | 亚洲精品一区二区三区在线观看 | 久久草在线精品 | 国产成人刺激视频在线观看 | 日本精品一区二区三区在线 | 久在草视频 | 亚洲欧美中文在线观看4 | 怡红院最新免费全部视频 | 荡女妇边被c边呻吟久久 | 女初高中福利视频在线观看 | 精品动漫一区二区 |