java里的異常多種多樣荐开,這是一種非常有用的機(jī)制咧最,它能幫助我們處理那些我們未知的錯(cuò)誤赠堵,在java里,關(guān)于異常的有throw throws,還有一個(gè)try catch 程序塊礼饱。接下來(lái)我們挨個(gè)看看這幾個(gè)的作用。
1.throw
throw 就是拋出一個(gè)異常,并獲取這個(gè)異常的引用回俐,這個(gè)異常會(huì)被拋到外部的環(huán)境,由外部環(huán)境進(jìn)行處理
class A{
public void func() throws Exception{
throw new Exception();
}
}
這里拋出了一個(gè)Exception,Exception是throwable的子類稀并,是所有異常的基類仅颇。與此同時(shí),throwable還有另一個(gè)子類,也就是Error碘举。
這里會(huì)把Exception這個(gè)引用拋到外部環(huán)境中去處理忘瓦。
throw跟try...catch...finally的對(duì)比:
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100/ 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
try catch是直接處理,處理完成之后程序繼續(xù)往下執(zhí)行引颈,throw則是將異常拋給它的上一級(jí)處理耕皮,程序便不往下執(zhí)行了。
本題的catch語(yǔ)句塊里面蝙场,打印完1之后凌停,又拋出了一個(gè)RuntimeException,程序并沒(méi)有處理它李丰,而是直接拋出苦锨,
因此執(zhí)行完finally語(yǔ)句塊之后,程序終止了
首先執(zhí)行try,遇到算術(shù)異常舟舒,拋出拉庶,執(zhí)行catch,打印1秃励,然后拋出RuntimeException氏仗,緩存異常,執(zhí)行finally夺鲜,打印2皆尔,然后拋出RuntimeException。
如果catch中沒(méi)有拋出RuntimeException币励,則執(zhí)行結(jié)果為123慷蠕。
2.throws
那我們就不得不說(shuō)一下throws,其實(shí)throws并不是拋出一個(gè)實(shí)際的Exception而是一個(gè)異常聲明食呻,它聲明這個(gè)方法可能會(huì)拋出一個(gè)異常流炕,注意是可能,所以在沒(méi)有異常的情況下也是可以用throws的仅胞,而throws本身的作用也是用來(lái)提高程序的健壯性每辟,反過(guò)來(lái),如果這個(gè)方法的的確確的有一個(gè)異常干旧,那么編譯器會(huì)強(qiáng)制讓你加上throws這個(gè)異常聲明渠欺。
通常throws是寫在參數(shù)列表的后面,這樣就表明這個(gè)方法有可能會(huì)拋出一個(gè)異常
class A{
public void func() throws Exception{
throw new Exception();
}
public void g() throws Exception{
}
}
3.try...catch
當(dāng)我們?cè)谄洵h(huán)境中調(diào)用func 和 g的時(shí)候椎眯,編譯器會(huì)通知我們需要用一個(gè)Try catch程序塊來(lái)處理這個(gè)異常挠将。
這個(gè)程序塊分兩塊,第一塊是try{} ,第二塊是catch(exception的引用){}
try這個(gè)程序塊很有意思盅视,因?yàn)樗拿趾芤锥杳褪菄L試,嘗試能不能正常的走完整個(gè)作用域闹击,如果不能則拋出一個(gè)異常镶蹋。所以我們?cè)趖ry塊里經(jīng)常放上可能會(huì)拋出異常的程序段。
而catch恰好就是處理try里拋出來(lái)的異常赏半,其中catch的參數(shù)列表接收的是一個(gè)異常的引用贺归,是throw拋出來(lái)的異常的引用,這樣我們就可以得到這個(gè)異常的對(duì)象断箫,倒不如說(shuō)我們是得到來(lái)了這個(gè)異常對(duì)象的引用拂酣,因?yàn)樵趈ava里,通常我們也只能通過(guò)引用來(lái)操縱對(duì)象仲义。
PS:當(dāng) throw new RuntimeException的時(shí)候婶熬,不用throws
public class Main {
public static void main(String[] args){
A a = new A();
try{
a.func();
a.g();
}
catch(Exception e){
System.out.println("捕獲了一個(gè)異常");
}
}
}
我們捕獲了func 的異常剑勾,因?yàn)槲覀兠鞔_的指明func 會(huì)拋出一個(gè)異常throw new Exception();所以我們這里也會(huì)捕獲到,并去處理它赵颅,所以運(yùn)行起來(lái)我們會(huì)看到控制臺(tái)上會(huì)打印“捕獲了一個(gè)異乘淞恚”。
盡管g()沒(méi)有拋出任何的異常饺谬,編譯器還是要求我們要用try catch把它括起來(lái)捂刺,是因?yàn)樗鼡碛幸粋€(gè)throws 異常說(shuō)明。
**下面是常見(jiàn)的幾種異常募寨,供大家參考:
輸入輸出異常:IOException
算術(shù)異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強(qiáng)制轉(zhuǎn)換異常:ClassCastException
操作數(shù)據(jù)庫(kù)異常:SQLException
文件未找到異常:FileNotFoundException
數(shù)組負(fù)下標(biāo)異常:NegativeArrayException
數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
文件已結(jié)束異常:EOFException
字符串轉(zhuǎn)換為數(shù)字異常:NumberFormatException
方法未找到異常:NoSuchMethodException
2019-04-29異常throw和try catch和finally的對(duì)比
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刻炒,“玉大人决采,你說(shuō)我怎么就攤上這事》匕拢” “怎么了树瞭?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爱谁。 經(jīng)常有香客問(wèn)我晒喷,道長(zhǎng),這世上最難降的妖魔是什么访敌? 我笑而不...
- 正文 為了忘掉前任凉敲,我火速辦了婚禮,結(jié)果婚禮上寺旺,老公的妹妹穿的比我還像新娘爷抓。我一直安慰自己,他們只是感情好阻塑,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布蓝撇。 她就那樣靜靜地躺著,像睡著了一般陈莽。 火紅的嫁衣襯著肌膚如雪渤昌。 梳的紋絲不亂的頭發(fā)上虽抄,一...
- 那天,我揣著相機(jī)與錄音独柑,去河邊找鬼极颓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛群嗤,可吹牛的內(nèi)容都是我干的菠隆。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼狂秘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骇径!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起者春,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤破衔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钱烟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晰筛,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年拴袭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了读第。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站蒸眠,受9級(jí)特大地震影響漾橙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜楞卡,卻給世界環(huán)境...
- 文/蒙蒙 一霜运、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧臀晃,春花似錦觉渴、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至险绘,卻和暖如春踢京,著一層夾襖步出監(jiān)牢的瞬間誉碴,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓蹈丸,卻偏偏與公主長(zhǎng)得像成黄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逻杖,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 異常的概述 異常概述異常就是Java程序在運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤。 由來(lái)問(wèn)題也是現(xiàn)實(shí)生活中一個(gè)具體事務(wù)澡为,也可以通過(guò)j...
- java異常概念 java異常分類 異常的捕獲和處理 運(yùn)行期出現(xiàn)的錯(cuò)誤是最難解決的. 觀察錯(cuò)誤名字和行號(hào)最重要! ...
- Java 的基本理念是 “結(jié)構(gòu)不佳的代碼不能運(yùn)行” 錯(cuò)誤回復(fù)在我們編寫的每個(gè)程序中都是基本的元素 Java 的主要...
- 難度 初級(jí) 學(xué)習(xí)時(shí)間 10分鐘 適合人群 零基礎(chǔ) 開(kāi)發(fā)語(yǔ)言 Java 開(kāi)發(fā)環(huán)境 JDK v11 IntelliJ ...