色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java為什么總是需要拋各種異常

java為什么總是需要拋各種異常?

首先,我們知道Java有3種拋出異常的形式:throw(執(zhí)行的時(shí)候一定拋出某種異常對(duì)象), throws(出現(xiàn)異常的可能性,不一定會(huì)發(fā)生), 系統(tǒng)自動(dòng)拋異常。

throw用在一個(gè)語(yǔ)句拋出異常的時(shí)候,throw (an instance of exception class)比如一個(gè)方法/函數(shù)里,try{…}catch(Exception e){throw new ArithmeticException(“XXX”);}finally{…};

throws則是用在聲明方法可能拋出異常的時(shí)候,throw (exception class)比如public int division(int x, int y) throws ArithmeticException {…};

系統(tǒng)自動(dòng)拋異常則是當(dāng)程序語(yǔ)句出現(xiàn)邏輯錯(cuò)誤,主義錯(cuò)誤或類(lèi)型轉(zhuǎn)換錯(cuò)誤的時(shí)候,系統(tǒng)自動(dòng)拋出異常,比如int a = 5; int b = 0; c = a/b; 這個(gè)時(shí)候移動(dòng)會(huì)自動(dòng)拋出ArithmeticException。

什么是異常異常,顧名思義,就是有異于正常狀態(tài),有錯(cuò)誤發(fā)生。而這錯(cuò)誤會(huì)阻止Java當(dāng)前函數(shù)方法的運(yùn)行。

那么Java里面異常的體系是怎么樣的呢?

1.Java里面所有不正常類(lèi)都繼承于Throwable類(lèi);而Throwable類(lèi)包括2類(lèi):Error類(lèi)和Exception類(lèi)。

2.Error類(lèi)包括虛擬機(jī)錯(cuò)誤(VirtualMachineError)和線程死鎖(ThreadDeath)。

3.Exception類(lèi)則是我們?cè)谡f(shuō)的異常;包括運(yùn)行時(shí)異常(RuntimeException)和檢查異常;這里的異常通常是編碼,環(huán)境,用戶操作輸入出現(xiàn)了問(wèn)題。

4.運(yùn)行時(shí)異常(RuntimeException)包括以下4種異常:空指針異常(NullPointerException),數(shù)組下標(biāo)越界異常(ArrayIndexOutOfBoundsException),類(lèi)型轉(zhuǎn)換異常(ClassCastException),算術(shù)異常(ArithmeticException)。

空指針異常:

數(shù)組下標(biāo)越界異常:

類(lèi)型轉(zhuǎn)換異常:

算術(shù)異常:

5.最后剩下的檢查異常則是剩下各種異常的集合;這里發(fā)生異常的原因有很多,文件異常(IOException),連接異常(SQLException)等等;和運(yùn)行時(shí)異常不同的是,這里的異常我們必須手動(dòng)在代碼里添加try…catch…(finally…)語(yǔ)句來(lái)捕獲處理。

今天又了解學(xué)習(xí)到了一些具體的額外的異常:

Throw拋出異常詳細(xì)過(guò)程和throws聲明方法可能會(huì)發(fā)生異常不同,throw語(yǔ)句則是直接拋出一個(gè)異常。

前面有提到,throw (an instance of exception class),這里的一個(gè)exception類(lèi)的實(shí)例其實(shí)也可以說(shuō)是一個(gè)ExceptionObject(Throwable類(lèi)或則其子類(lèi) 的對(duì)象;也可以是自定義的繼承自Throwable的直接或間接的異常類(lèi))。如果,我們用了throw new String(“異常XXX”); 則會(huì)在編譯的時(shí)候報(bào)錯(cuò),因?yàn)镾tring 類(lèi)并不是Throwable類(lèi)的子類(lèi)。

接著讓我們回到怎么用throw語(yǔ)句的階段。

一般我們有兩種方式來(lái)用throw:直接在某處會(huì)發(fā)生異常的地方用throw語(yǔ)句或則用try…catch…finally…語(yǔ)句來(lái)捕獲處理異常和關(guān)閉釋放資源。

首先是第一種,直接在某處會(huì)發(fā)生異常的地方用throw語(yǔ)句;這是一種主動(dòng)的方法,主動(dòng)拋出異常去處理。

而第二種,用try…catch…finally…語(yǔ)句來(lái)捕獲處理異常和關(guān)閉釋放資源 則是被動(dòng)的方法。try里面放入可能會(huì)發(fā)生異常的語(yǔ)句塊,如果在運(yùn)行期間遇到了異常,則會(huì)交給catch來(lái)處理異常(catch可以是多個(gè),處理不同的異常),finally則是無(wú)論有沒(méi)有異常發(fā)生,只要加上了就會(huì)運(yùn)行。

首先我們來(lái)看第一種方法的函數(shù):

我們的int c = 4/2,其實(shí)是正確的;但是我們的throw 語(yǔ)句主動(dòng)拋出了異常,那么程序就會(huì)到catch里面找有沒(méi)有這個(gè)異常,有的話進(jìn)行處理。所以我們要主動(dòng)拋異常的話,要很確信這個(gè)代碼一定會(huì)發(fā)生異常且后期不太會(huì)去變動(dòng)了(最好放在if條件語(yǔ)句里)。所以我們得到的結(jié)果如下:

接著我們來(lái)看第二種方法。我們一開(kāi)始先測(cè)正確的,只是把主動(dòng)拋出異常語(yǔ)句給注釋掉:

因?yàn)閠ry里面的語(yǔ)句塊沒(méi)有異常,所以只執(zhí)行了try和finally里面的語(yǔ)句塊。運(yùn)行的結(jié)果如下:

我們接著來(lái)測(cè)當(dāng)try里面的語(yǔ)句塊有異常,且沒(méi)有主動(dòng)拋出異常的時(shí)候,try會(huì)不會(huì)捕捉到異常吧:

得到的結(jié)果如下,會(huì)去處理異常和執(zhí)行finally里面的語(yǔ)句塊:

最后深入理解一點(diǎn)try里面的異常觸發(fā)會(huì)逐層向上的這個(gè)概念。在我們try語(yǔ)句里主動(dòng)/被動(dòng)拋出異常的時(shí)候,程序會(huì)調(diào)向調(diào)用者程序(上面的例子里就是我們自己這個(gè)函數(shù);但有的時(shí)候我們會(huì)在try語(yǔ)句里執(zhí)行別的函數(shù)比如B,這個(gè)函數(shù)B里我們假如觸發(fā)了異常,它會(huì)調(diào)向try語(yǔ)句所在的函數(shù)A),尋找和它相匹配的catch語(yǔ)句,執(zhí)行catch語(yǔ)句里面相應(yīng)的異常處理程序;但假如沒(méi)有找到相匹配的catch語(yǔ)句,那么它會(huì)再轉(zhuǎn)向上一層的調(diào)用程序…這樣逐層向上,直到最外層的異常程序終止程序并打印出stack trace。

參考資料

rollbar.com/guides/java…www.javatpoint.com/throw-keywo…www.geeksforgeeks.org/throw-throw…

本文分享自華為云社區(qū)《Java-throw異常詳解以及過(guò)程-云社區(qū)-華為云》,作者:gentle_zhou。

java定位,java為什么總是需要拋各種異常