中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Java throw throws try...catch區別(bie)

java里(li)的(de)(de)異常多種多樣,這是一(yi)種非常有用(yong)的(de)(de)機制,它能(neng)幫助我(wo)們(men)處(chu)理那些我(wo)們(men)未知的(de)(de)錯誤,在java里(li),關于異常的(de)(de)有throw throws,還有一(yi)個try catch 程(cheng)序塊。接下來我(wo)們(men)挨個看看這幾(ji)個的(de)(de)作用(yong)。

1.throw

throw 就是拋(pao)(pao)出一(yi)個異(yi)常(chang),并獲取這個異(yi)常(chang)的(de)引用,這個異(yi)常(chang)會被拋(pao)(pao)到外部(bu)的(de)環境,由外部(bu)環境進行處理

class A{
	public void func() throws Exception{
		throw new Exception();
	}
}

這里拋(pao)出了一個Exception,Exception是(shi)throwable的子類,是(shi)所有異常的基(ji)類。與(yu)此同時,throwable還有另(ling)一個子類,也就是(shi)Error。

這里會把Exception這個引(yin)用拋到外(wai)部(bu)環(huan)境中去處理。

2.throws

那我們(men)就不得(de)不說一(yi)下(xia)throws,其(qi)實throws并(bing)不是拋出(chu)一(yi)個(ge)實際的(de)Exception而是一(yi)個(ge)異(yi)常(chang)(chang)聲(sheng)明(ming)(ming),它聲(sheng)明(ming)(ming)這個(ge)方(fang)法(fa)可能會拋出(chu)一(yi)個(ge)異(yi)常(chang)(chang),注意是可能,所以(yi)在沒有異(yi)常(chang)(chang)的(de)情況(kuang)下(xia)也(ye)是可以(yi)用(yong)throws的(de),而throws本(ben)身的(de)作(zuo)用(yong)也(ye)是用(yong)來提(ti)高程序(xu)的(de)健壯性,反(fan)過來,如(ru)果這個(ge)方(fang)法(fa)的(de)的(de)確確的(de)有一(yi)個(ge)異(yi)常(chang)(chang),那么編譯器會強制讓你(ni)加上(shang)throws這個(ge)異(yi)常(chang)(chang)聲(sheng)明(ming)(ming)。

通常(chang)(chang)throws是寫在參數(shu)列表的(de)后面,這樣(yang)就(jiu)表明這個(ge)(ge)方法有可能會拋(pao)出一個(ge)(ge)異(yi)常(chang)(chang)

class A{
	public void func() throws Exception{
		throw new Exception();
	}
	
	public void g() throws Exception{
		
	}
}

3.try...catch

當我們在其(qi)環(huan)境中調用func 和 g的時候,編譯器會(hui)通知我們需要用一個Try catch程(cheng)序(xu)塊來(lai)處理(li)這個異常。

這個程序塊分兩塊,第一塊是try{} ,第二塊是catch(exception的引用){}
try這個程序塊很有意思,因為它的名字很易懂,就是嘗試,嘗試能不能正常的走完整個作用域,如果不能則拋出一個異常。所以我們在try塊里經常放上可能會拋出異常的程序段。
而catch恰好(hao)就(jiu)是(shi)處理try里拋(pao)出來(lai)的(de)(de)異(yi)(yi)常(chang),其中catch的(de)(de)參數列表(biao)接收的(de)(de)是(shi)一個異(yi)(yi)常(chang)的(de)(de)引(yin)用(yong),是(shi)throw拋(pao)出來(lai)的(de)(de)異(yi)(yi)常(chang)的(de)(de)引(yin)用(yong),這樣我(wo)們(men)就(jiu)可以得到這個異(yi)(yi)常(chang)的(de)(de)對象,倒不如說我(wo)們(men)是(shi)得到來(lai)了這個異(yi)(yi)常(chang)對象的(de)(de)引(yin)用(yong),因為在(zai)java里,通常(chang)我(wo)們(men)也只能通過(guo)引(yin)用(yong)來(lai)操縱(zong)對象。

PS:當 throw new RuntimeException的時候,不用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("捕獲了一個異常");
		}
	}
}

我們捕獲了(le)func 的異常(chang),因為我們明確的指明func 會拋(pao)出一(yi)個異常(chang)throw new Exception();所以我們這里也會捕獲到,并去處理它(ta),所以運行起來我們會看到控(kong)制臺(tai)上會打印“捕獲了(le)一(yi)個異常(chang)”。

盡管g()沒有(you)拋出任何的異常,編譯器還是要求我們要用(yong)try catch把它括起來(lai),是因為它擁有(you)一(yi)個(ge)throws 異常說(shuo)明。

相信java的異(yi)常處(chu)理機(ji)制會(hui)讓你的程序健壯性提高很多

posted @ 2016-10-16 17:45  浩大王  閱讀(238)  評論(0)    收藏  舉報