throw和throws的區(qū)別java throw語句和throws聲明有什么區(qū)別
本篇文章給大家談?wù)則hrow和throws的區(qū)別java,以及throw語句和throws聲明有什么區(qū)別對應(yīng)的知識點(diǎn),文章可能有點(diǎn)長,但是希望大家可以閱讀完,增長自己的...
本篇文章給大家談?wù)則hrow和throws的區(qū)別java,以及throw語句和throws聲明有什么區(qū)別對應(yīng)的知識點(diǎn),文章可能有點(diǎn)長,但是希望大家可以閱讀完,增長自己的知識,最重要的是希望對各位有所幫助,可以解決了您的問題,不要忘了收藏本站喔。
throw與throws的區(qū)別與聯(lián)系是什么
throw和throws是Java中異常處理的關(guān)鍵字,它們之間有以下區(qū)別和聯(lián)系:
區(qū)別
throw用于在方法內(nèi)部拋出一個(gè)異常對象,表示該方法出現(xiàn)了某種錯(cuò)誤或異常情況。例如:thrownewException("發(fā)生了錯(cuò)誤");
throws用于在方法聲明中指定該方法可能會(huì)拋出哪些類型的異常。例如:publicvoiddoSomething()throwsIOException,InterruptedException{}
聯(lián)系
throw和throws都與Java中的異常處理相關(guān),可以幫助程序員檢測和處理代碼中可能出現(xiàn)的錯(cuò)誤或異常情況。
在使用throw時(shí),如果該方法聲明了throws語句,則需要將該拋出的異常交給調(diào)用者進(jìn)行處理;如果未聲明throws語句,則需要在該方法內(nèi)部通過try-catch塊來捕獲并處理該異常。
在使用throws時(shí),表示該方法可能會(huì)拋出一些特定類型的異常,在調(diào)用該方法時(shí),必須對這些可能發(fā)生的異常進(jìn)行捕獲或者再次向上層調(diào)用者拋出。
總之,throw和throws都是Java中非常重要的關(guān)鍵字,在編寫程序時(shí)需要注意它們之間的區(qū)別和聯(lián)系,并且合理地使用它們來實(shí)現(xiàn)代碼邏輯和錯(cuò)誤處理。
throws和throw有什么區(qū)別
一:位置不同。throws用在函數(shù)上,后邊跟的是異常類,可以跟多個(gè)異常類。throw用在函數(shù)內(nèi),后面跟的是異常對象。
二:功能不同。①throws用來聲明異常,讓調(diào)用者只知道該功能可能出現(xiàn)的問題,可以給出預(yù)先得處理方式。throw拋出具體的問題對象,執(zhí)行到throw。功能就已經(jīng)結(jié)束了跳轉(zhuǎn)到調(diào)用者,并將具體的問題對象拋給調(diào)用者,也就是說throw語句獨(dú)立存在時(shí),下面不要定義其他語句,因?yàn)閳?zhí)行不到。②throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常,throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常對象。
throw at和throw to的區(qū)別
throwto和throwat二者區(qū)別在于:
前者是“把某物扔給某人”,含有讓某人接住某物的意味,是善意的;
而后者的意思是“把某物向某人扔去”,含有尋釁的意味,是惡意的。
試比較:
Theboythrowsabonetothedog.
那小孩給狗扔了一塊骨頭。(善意)
Theboythrowsaboneatthedog.
那小孩把一塊骨頭扔到狗身上。(惡意)
擴(kuò)展資料
throw的用法
v.(動(dòng)詞)
1、throw的基本意思是“投”“擲”“拋”,指用工具或徒手(彎曲臂肘)將物體以迅速發(fā)力的動(dòng)作拋出,也可泛指任何推進(jìn)動(dòng)作,是日常用語,不帶感情色彩。引申可表示“難住”“摔倒”“挺”“擺脫”“脫(皮)”“投射(光線,陰影)”“施加(影響)”等。
2、throw既可用作及物動(dòng)詞,也可用作不及物動(dòng)詞。用作及物動(dòng)詞時(shí)接名詞、代詞作賓語,也可接雙賓語(其間接賓語可以轉(zhuǎn)化為介詞to的賓語)。
3、throw還可接由形容詞充當(dāng)補(bǔ)足語的復(fù)合賓語,當(dāng)賓語較長或包含有疑問詞或關(guān)系代詞時(shí),形容詞常跟在動(dòng)詞的后面。
n.(名詞)
throw用作名詞時(shí),基本意思是“投,擲,拋”,引申可指“投擲的距離”,是可數(shù)名詞。
Java中throw是拋出異常對象,throws是拋出異常類,對嗎
不對。throw是拋出異常對象。throws是聲明異常。即當(dāng)前方法可能會(huì)拋出的異常。throws不會(huì)拋出異常。這只是告訴你這個(gè)方法有可能出現(xiàn)異常
java為什么總是需要拋各種異常
首先,我們知道Java有3種拋出異常的形式:throw(執(zhí)行的時(shí)候一定拋出某種異常對象),throws(出現(xiàn)異常的可能性,不一定會(huì)發(fā)生),系統(tǒng)自動(dòng)拋異常。
throw用在一個(gè)語句拋出異常的時(shí)候,throw(aninstanceofexceptionclass)比如一個(gè)方法/函數(shù)里,try{…}catch(Exceptione){thrownewArithmeticException(“XXX”);}finally{…};
throws則是用在聲明方法可能拋出異常的時(shí)候,throw(exceptionclass)比如publicintdivision(intx,inty)throwsArithmeticException{…};
系統(tǒng)自動(dòng)拋異常則是當(dāng)程序語句出現(xiàn)邏輯錯(cuò)誤,主義錯(cuò)誤或類型轉(zhuǎn)換錯(cuò)誤的時(shí)候,系統(tǒng)自動(dòng)拋出異常,比如inta=5;intb=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里面所有不正常類都繼承于Throwable類;而Throwable類包括2類:Error類和Exception類。
2.Error類包括虛擬機(jī)錯(cuò)誤(VirtualMachineError)和線程死鎖(ThreadDeath)。
3.Exception類則是我們在說的異常;包括運(yùn)行時(shí)異常(RuntimeException)和檢查異常;這里的異常通常是編碼,環(huán)境,用戶操作輸入出現(xiàn)了問題。
4.運(yùn)行時(shí)異常(RuntimeException)包括以下4種異常:空指針異常(NullPointerException),數(shù)組下標(biāo)越界異常(ArrayIndexOutOfBoundsException),類型轉(zhuǎn)換異常(ClassCastException),算術(shù)異常(ArithmeticException)。
空指針異常:
數(shù)組下標(biāo)越界異常:
類型轉(zhuǎn)換異常:
算術(shù)異常:
5.最后剩下的檢查異常則是剩下各種異常的集合;這里發(fā)生異常的原因有很多,文件異常(IOException),連接異常(SQLException)等等;和運(yùn)行時(shí)異常不同的是,這里的異常我們必須手動(dòng)在代碼里添加try…catch…(finally…)語句來捕獲處理。
今天又了解學(xué)習(xí)到了一些具體的額外的異常:
Throw拋出異常詳細(xì)過程和throws聲明方法可能會(huì)發(fā)生異常不同,throw語句則是直接拋出一個(gè)異常。
前面有提到,throw(aninstanceofexceptionclass),這里的一個(gè)exception類的實(shí)例其實(shí)也可以說是一個(gè)ExceptionObject(Throwable類或則其子類的對象;也可以是自定義的繼承自Throwable的直接或間接的異常類)。如果,我們用了thrownewString(“異常XXX”);則會(huì)在編譯的時(shí)候報(bào)錯(cuò),因?yàn)镾tring類并不是Throwable類的子類。
接著讓我們回到怎么用throw語句的階段。
一般我們有兩種方式來用throw:直接在某處會(huì)發(fā)生異常的地方用throw語句或則用try…catch…finally…語句來捕獲處理異常和關(guān)閉釋放資源。
首先是第一種,直接在某處會(huì)發(fā)生異常的地方用throw語句;這是一種主動(dòng)的方法,主動(dòng)拋出異常去處理。
而第二種,用try…catch…finally…語句來捕獲處理異常和關(guān)閉釋放資源則是被動(dòng)的方法。try里面放入可能會(huì)發(fā)生異常的語句塊,如果在運(yùn)行期間遇到了異常,則會(huì)交給catch來處理異常(catch可以是多個(gè),處理不同的異常),finally則是無論有沒有異常發(fā)生,只要加上了就會(huì)運(yùn)行。
首先我們來看第一種方法的函數(shù):
我們的intc=4/2,其實(shí)是正確的;但是我們的throw語句主動(dòng)拋出了異常,那么程序就會(huì)到catch里面找有沒有這個(gè)異常,有的話進(jìn)行處理。所以我們要主動(dòng)拋異常的話,要很確信這個(gè)代碼一定會(huì)發(fā)生異常且后期不太會(huì)去變動(dòng)了(最好放在if條件語句里)。所以我們得到的結(jié)果如下:
接著我們來看第二種方法。我們一開始先測正確的,只是把主動(dòng)拋出異常語句給注釋掉:
因?yàn)閠ry里面的語句塊沒有異常,所以只執(zhí)行了try和finally里面的語句塊。運(yùn)行的結(jié)果如下:
我們接著來測當(dāng)try里面的語句塊有異常,且沒有主動(dòng)拋出異常的時(shí)候,try會(huì)不會(huì)捕捉到異常吧:
得到的結(jié)果如下,會(huì)去處理異常和執(zhí)行finally里面的語句塊:
最后深入理解一點(diǎn)try里面的異常觸發(fā)會(huì)逐層向上的這個(gè)概念。在我們try語句里主動(dòng)/被動(dòng)拋出異常的時(shí)候,程序會(huì)調(diào)向調(diào)用者程序(上面的例子里就是我們自己這個(gè)函數(shù);但有的時(shí)候我們會(huì)在try語句里執(zhí)行別的函數(shù)比如B,這個(gè)函數(shù)B里我們假如觸發(fā)了異常,它會(huì)調(diào)向try語句所在的函數(shù)A),尋找和它相匹配的catch語句,執(zhí)行catch語句里面相應(yīng)的異常處理程序;但假如沒有找到相匹配的catch語句,那么它會(huì)再轉(zhuǎn)向上一層的調(diào)用程序…這樣逐層向上,直到最外層的異常程序終止程序并打印出stacktrace。
參考資料
rollbar.com/guides/java…www.javatpoint.com/throw-keywo…www.geeksforgeeks.org/throw-throw…本文分享自華為云社區(qū)《Java-throw異常詳解以及過程-云社區(qū)-華為云》,作者:gentle_zhou。
throw可不可以區(qū)分錯(cuò)誤異常
1.throws出現(xiàn)在方法函數(shù)頭,可以單獨(dú)使用;而throw出現(xiàn)在函數(shù)體,不可以單獨(dú)使用,throw要么和try-catch-finally語句配套使用,要么與throws配套使用。
2.throws主要是聲明這個(gè)方法會(huì)拋出這種類型的異常,使其他地方調(diào)用它時(shí)知道要捕獲這個(gè)異常。throw是具體向外拋異常的動(dòng)作,所以它是拋出一個(gè)異常實(shí)例。
3.throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常;
4.程序會(huì)在throw語句后立即終止,它后面的語句執(zhí)行不到,然后在包含它的所有try塊中
throw和throws的區(qū)別java和throw語句和throws聲明有什么區(qū)別的問題分享結(jié)束啦,以上的文章解決了您的問題嗎?歡迎您下次再來哦!
本文鏈接:http://xinin56.com/kaifa/296.html