国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java違例控制

2019-11-18 11:03:17
字體:
來源:轉載
供稿:網友

 


前言

本文主要討論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

到底方法中會擲出哪些違例呢?

它包括你的方法中本身代碼擲出的違例,你調用的方法擲出的違例,甚至還包括你調用的方法中調用的其他方法擲出的違例,等等。總之,只要控制流還在你的方法范圍內,所有擲出的違例都是你必須考慮的。

實例代碼

/**

*



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿泉市| 观塘区| 南通市| 金塔县| 昭觉县| 兴宁市| 七台河市| 阳东县| 大英县| 桂东县| 中江县| 石门县| 南靖县| 黄山市| 清苑县| 萨迦县| 新田县| 广灵县| 石嘴山市| 灵山县| 肃北| 嘉祥县| 平罗县| 成武县| 吉木乃县| 大悟县| 济阳县| 梓潼县| 永修县| 连城县| 蒙城县| 海林市| 沧州市| 区。| 建平县| 灵丘县| 呼和浩特市| 芦山县| 侯马市| 离岛区| 华容县|