自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java的異常和斷言學(xué)習(xí)筆記

開發(fā) 后端
本文向您介紹Java異常和斷言的相關(guān)知識(shí),對(duì)Java異常和斷言的使用常見、方法和技巧做詳細(xì)的介紹。

Java異常

在Java中,一個(gè)異常對(duì)象總是Throwable子類的實(shí)例。

Error類體系描述了Java運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤以及資源耗盡的情況。

由編程導(dǎo)致的錯(cuò)誤,會(huì)導(dǎo)致RuntimeException異常。而其他錯(cuò)誤原因?qū)е碌漠惓?---例如,因?yàn)镮/O錯(cuò)誤導(dǎo)致的曾經(jīng)運(yùn)行正確的程序出錯(cuò),都不會(huì)導(dǎo)致RuntimeException異常。

從RuntimeException衍生出來的異常包括下面的問題:1〉錯(cuò)誤的類型轉(zhuǎn)換;2〉數(shù)組越界訪問;3〉試圖訪問一個(gè)空指針。

不是從RuntimeException衍生出來的異常包括:

1〉試圖從文件尾后面讀取數(shù)據(jù);

2〉試圖打開一個(gè)錯(cuò)誤格式的URL;

3〉試圖用一個(gè)字符串來構(gòu)造一個(gè)Class對(duì)象,而當(dāng)該字符串對(duì)應(yīng)的類并不存在;

處理RuntimeException的原則是:如果出現(xiàn)RuntimeException,則一定是你的錯(cuò)誤;

不同的瀏覽器可以處理不同類型的URL,所以,URL格式是否錯(cuò)誤依賴于具體的環(huán)境,而不僅僅是程序代碼;

Java語言規(guī)范中將任何Error的子類以及RuntimeException的子類都稱為未檢查異常,而其他的異常則稱為已檢查異常;

僅僅在以下4種情況下,才會(huì)拋出異常:

1〉調(diào)用了一個(gè)會(huì)拋出"已檢查異常"的方法,例如BufferReader類的readLine方法;

2〉程序運(yùn)行過程中發(fā)生了錯(cuò)誤,并且用throw語句拋出一個(gè)"已檢查異常";

3〉程序錯(cuò)誤,例如a[-1]=0會(huì)拋出一個(gè)"未檢查異常"如數(shù)組下標(biāo)越界(ArrayIndex--OutOfBoundsException);

4〉Java虛擬機(jī)或者是運(yùn)行時(shí)庫出現(xiàn)了內(nèi)部錯(cuò)誤;

不需要聲明Java的內(nèi)部錯(cuò)誤。一個(gè)方法必須聲明它可能拋出的全部"已檢查異常"。如果在自己的子類中覆蓋了一個(gè)來自父類的方法。特別需要注意的是,如果父類方法根本沒有拋出任何"已檢查異常",則子類也只能如此;

在Java中,沒有throws指示符的方法是不能拋出任何已檢查Java異常的;

對(duì)于try/catch代碼塊,如果方法內(nèi)的任何代碼拋出了一個(gè)異常,同時(shí)它的類型沒有在catch中指定,則方法會(huì)立即退出;

應(yīng)捕捉并且處理那些已知如何處理的異常(用catch),而傳遞那些不知如何處理的異常(用throws);

對(duì)于try/catch/finally代碼塊,無論是否捕獲異常,都會(huì)執(zhí)行finally從句中的代碼;

雖然Java程序員必須在finally從句中人工設(shè)置代碼來回收資源,但由于Java內(nèi)建有"垃圾收集"機(jī)制,所以只有極少數(shù)的資源才要求人工進(jìn)行回收;

actionPerformed方法不能拋出任何已檢查異常;

使用Java異常機(jī)制的一些技巧:

1〉異常控制不能代替簡單的測(cè)試,和執(zhí)行簡單的測(cè)試相比,捕捉異常所需的時(shí)間大大超過前者,所以,只有在異常情況下才使用異常;

2〉不要過分細(xì)化異常;

3〉不要壓制異常:可以使用如下格式: try { //代碼 } catch (Exception e) { //空 }

4〉不要羞于傳遞異常:對(duì)于某些異常(如調(diào)用FileInputStream構(gòu)造器或者readLine方法產(chǎn)生的異常),傳遞它比捕捉它更好。讓高層的方法來通知用戶發(fā)生了錯(cuò)誤或者放棄執(zhí)行不成功的命令更合適。

Java斷言

默認(rèn)情況下,Java斷言是關(guān)閉的??赏ㄟ^-ea來打開,用-da來關(guān)閉。選項(xiàng)-ea:...會(huì)打開默認(rèn)包中全部類的斷言功能,打開或者關(guān)閉斷言是類裝載器的功能;

-da和-ea選項(xiàng)對(duì)那些沒有類加載器的"系統(tǒng)類"是不起作用的。對(duì)于這些系統(tǒng)類,要使用-enablesystemassertions/-esa選項(xiàng)來打開斷言功能;

Java斷言使用技巧:

1>斷言失敗是致命的,不可恢復(fù)的錯(cuò)誤;

2>斷言檢查僅僅用在程序開發(fā)和測(cè)試階段;

因此,不應(yīng)該用斷言作為信號(hào)來通知程序的另外部分發(fā)生了可恢復(fù)錯(cuò)誤,或者將斷言作為通知程序使用者的方式。Java斷言僅僅應(yīng)該在測(cè)試階段用來定位程序內(nèi)部錯(cuò)誤;

Java斷言是在測(cè)試和調(diào)試階段使用的工具,而日志是在程序整個(gè)生命周期中都使用的策略性工具。

下面是think in java中的一段

違例準(zhǔn)則

用違例做下面這些事情:

(1) 解決問題并再次調(diào)用造成違例的方法。

(2) 平息事態(tài)的發(fā)展,并在不重新嘗試方法的前提下繼續(xù)。

(3) 計(jì)算另一些結(jié)果,而不是希望方法產(chǎn)生的結(jié)果。

(4) 在當(dāng)前環(huán)境中盡可能解決問題,以及將相同的違例重新“擲”出一個(gè)更高級(jí)的環(huán)境。

(5) 在當(dāng)前環(huán)境中盡可能解決問題,以及將不同的違例重新“擲”出一個(gè)更高級(jí)的環(huán)境。

(6) 中止程序執(zhí)行。

(7) 簡化編碼。若違例方案使事情變得更加復(fù)雜,那就會(huì)令人非常煩惱,不如不用。

(8) 使自己的庫和程序變得更加安全。這既是一種“短期投資”(便于調(diào)試),也是一種“長期投資”(改善應(yīng)用程序的健壯性)

總結(jié)

通過先進(jìn)的錯(cuò)誤糾正與恢復(fù)機(jī)制,我們可以有效地增強(qiáng)代碼的健壯程度。對(duì)我們編寫的每個(gè)程序來說,錯(cuò)誤恢復(fù)都屬于一個(gè)基本的考慮目標(biāo)。它在Java中顯得尤為重要,因?yàn)樵撜Z言的一個(gè)目標(biāo)就是創(chuàng)建不同的程序組件,以便其他用戶(客戶程序員)使用。為構(gòu)建一套健壯的系統(tǒng),每個(gè)組件都必須非常健壯。

在Java里,違例控制的目的是使用盡可能精簡的代碼創(chuàng)建大型、可靠的應(yīng)用程序,同時(shí)排除程序里那些不能控制的錯(cuò)誤。

違例的概念很難掌握。但只有很好地運(yùn)用它,才可使自己的項(xiàng)目立即獲得顯著的收益。Java強(qiáng)迫遵守違例所有方面的問題,所以無論庫設(shè)計(jì)者還是客戶程序員,都能夠連續(xù)一致地使用它。

 

【編輯推薦】

  1. Java運(yùn)行時(shí)如何使用本機(jī)內(nèi)存
  2. 淺談進(jìn)行Java學(xué)習(xí)的捷徑與方法
  3. Java項(xiàng)目開發(fā)筆記與開發(fā)過程中的問題總結(jié)
  4. Java實(shí)例講解反射機(jī)制Reflection
  5. 高手Java核心技術(shù)學(xué)習(xí)筆記
責(zé)任編輯:佚名 來源: 豆豆網(wǎng)
相關(guān)推薦

2010-06-03 09:58:46

Linux 測(cè)試軟件

2011-04-06 11:08:52

Java異常

2021-03-18 10:01:06

Java編譯異常運(yùn)行異常

2009-06-29 09:00:14

JSFJava

2009-06-22 14:28:00

java接口

2023-12-11 14:19:00

Java程序異常

2009-06-17 14:21:39

core java

2009-06-29 16:50:27

Java集合框架

2009-06-19 18:38:01

Spring

2010-05-21 11:07:36

2009-08-27 16:53:01

C#委托C#事件

2016-12-15 13:31:20

Java異常處理經(jīng)驗(yàn)

2017-09-26 11:43:12

Java異常和處理

2024-10-08 08:00:00

2011-05-30 14:00:35

Android Activity Intent

2010-07-27 11:08:12

Flex

2011-08-16 10:56:01

SQLPLUS學(xué)習(xí)筆記ECHO

2011-03-16 10:13:31

java單例模式

2021-07-27 06:06:34

TypeScript語言運(yùn)算符

2015-07-08 16:00:32

Foundation
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)