難度
初級
學習時間30分鐘
適合人群零基礎
開發語言Java
開發環境JDK v11IntelliJ IDEA v2018.3友情提示本教學屬于系列教學,內容具有連貫性,本章使用到的內容之前教學中都有詳細講解。本章內容針對零基礎或基礎較差的同學比較友好,可能對于有基礎的同學來說很簡單,希望大家可以根據自己的實際情況選擇繼續看完或等待看下一篇文章。謝謝大家的諒解!1.throw拋出一個異常在上一章《“全棧2019”Java異常第八章:throw關鍵字詳解》中我們學會了使用throw關鍵字拋出一個異常。
當你使用了throw關鍵字之后,即意味著此處拋出了一個異常,那么,對于throw拋出的異常處理方式有兩種:
第一種,使用try-catch捕獲異常:
第二種,使用throws關鍵字將其聲明在方法上,讓調用者去處理:
throws關鍵字就是本章的內容。兄弟們,接下來就讓我們開始認識throws關鍵字。
2.什么是throws關鍵字?throws關鍵字用于聲明在當前定義的成員方法中所有需要拋出的異常。
下面我們分詞來看throws的定義。
第一個詞,聲明:
“throws關鍵字用于聲明在當前定義的成員方法中所有需要拋出的異常。”
聲明就是告訴的意思,告訴誰呢?告訴調用者,誰調用我這個方法,誰就處理我聲明的異常。
換言之就是,“喂,調用我方法的人,我告訴你,你調用我這個方法時,我方法里面有可能會產生異常,我不方便處理,你處理更合適,你記得處理一下。”
第二個詞,成員方法:
“throws關鍵字用于聲明在當前定義的成員方法中所有需要拋出的異常。”
成員方法只可能出現在類(抽象類也是類)和接口中。
好,這就好辦了,也就是說我們throws關鍵字只可能用在類和接口中的方法上。講道理,是這么個意思。
下面我們來演示看看。
類:
接口:
第三個詞,需要拋出的異常:
“throws關鍵字用于聲明在當前定義的成員方法中所有需要拋出的異常。”
需求拋出的異常你就拋,不需要拋出的異常你就別拋。
這個需要結合例子來說明,并且呢這個例子在之前文章里面出現過,有詳細講解,如果需要回顧的同學請點擊下面文章來進行查看:
《“全棧2019”Java異常第五章:一定會被執行的finally代碼塊》
溫馨提示:
例子有點長,請耐心看完,謝謝!
代碼看起來很多,但是一點都不難,下面我們一步一步來分析看看。
首先,我們先來看看目標方法printTxtContent(英文翻譯過來就是“打印txt文本內容”):
不要看它里面代碼很多,其實很簡單,方法接收一個txt文本文件的路徑:
然后聲明一個FileReader對象,用來讀取文件的:
將FileReader對象單獨聲明在最上面,是因為它需要在finally代碼塊里面進行關流操作:
我們使用了try-catch對有可能產生的異常進行處理:
try代碼塊里面開始對FileReader對象進行初始化:
創建FileReader的時候有可能產生找不到文件異常FileNotFoundException,我們對其進行catch操作:
繼續,往下來,是對文件進行遍歷讀取:
具體讀取操作是調用其FileReader的read()方法:
但是,在讀取的過程中有可能產生IOException,我們將其執行catch操作:
再接下來就是判斷是否文本文件已經讀取完畢,根據當前字符值是否為-1來判斷:
好了,最后就是打印字符:
至此,方法是寫好了,再來看看調用者,我們在main()方法中調用了printTxtContent()方法:
傳入了文本文件路徑:
好,整個程序代碼講解了一遍,如果有地方我沒有講解清楚的地方,請大家在評論區留言。
接下來,進入正題,上面這個例子整個程序代碼寫得有問題嗎?
有問題。
哪里有問題?
該拋出的異常,沒有拋出。在printTxtContent()方法里面的第29行。該行代碼執行的是初始化FileReader對象,同時會產生一個找不到文件異常FileNotFoundException。
這里有什么問題?
上述異常該拋出,應告知調用者,而不是自行處理。
為什么呢?
因為調用者傳給你的文件路徑有可能是不存在的或者寫錯了,這個錯誤應該告訴我,而不是你自己處理了,更何況你不知道怎么處理,而調用者知道。
好,根據上述描述來更改程序代碼:
我們有三處改動,第一處是創建FileReader對象:
第二處是聲明FileNotFoundException:
第三處是調用者處理FileNotFoundException:
另外,我們可以看到catch只剩下一個,原來是有兩個:
而且finally里面FileReader對象也不用判斷是否為Null:
至此,我們將需要拋出的異常聲明在方法上了,那么不需要拋出異常就別拋出了,也別聲明在方法上,比如下面這兩處產生的IOException:
這兩處產生的異常只能自行處理,因為你拋出去,調用者也不知道該如何處理,所以大家在寫方法時,特別是方法內產生異常時,一定要考慮什么異常該拋,什么異常不該拋。
3.throws關鍵字用在何處?throws關鍵字用在方法上:
上節例子已經描述的很清楚了,這里就不再贅述。
4.為什么要使用throws關鍵字?當我們遇到一些不知如何處理的異常,但調用方法的人知道怎么處理時,我們就可以將異常在方法上聲明此異常。
5.什么時候使用throws關鍵字?當我們遇到自己不知怎么處理的異常或需要調用者處理的時候,則可以使用throws關鍵字將其在方法上聲明出去。
6.怎么使用throws關鍵字?throws關鍵字跟在方法參數列表的后面,方法左大括號的前面。
throws關鍵字后面跟的是異常類型。
注意:
throw后面跟的是new關鍵字和異常對象。
throws后面跟的是異常類型。
它們是不同的,千萬別搞錯了。一個是對象,一個類型。
7.非運行時異常與運行時異常上一章講解過什么是非運行異常和運行時異常,這里就直接拿出結論。
什么是非運行時異常?
繼承自Exception的異常。
什么是運行時異常?
繼承自RuntimeException的異常。
RuntimeException和Exception之間有什么關系?
RuntimeException是Exception的子類。
拋出一個非運行時異常有什么特點?
當我們拋出一個非運行時異常時,我們要么對其try-catch,要么使用throws聲明出去。(上面幾個小節已經演示的很清楚了)
拋出一個運行時異常有什么特點?
當我們拋出一個運行時異常時,我們可以不對其try-catch,也不必使用thorws聲明出去。
從上一章我們了解到算術異常ArithmeticException是一個運行時異常。這里我們來演示一下使用throws聲明此異常。
演示:
請拋出一個算術異常ArithmeticException。
請觀察程序運行結果。
代碼:
Main類:
結果:
從運行結果來看,結果是我們想要的,這里程序沒有寫錯。
程序演示了運行時異常不必try-catch和throws。我們明明知道這里有可能發生異常,編譯器卻沒有提醒我們對其try-catch或thorws,仍然編譯通過,因為它是一個運行時異常,不強制你try-catch或thorws。
總結throws關鍵字用于聲明在當前定義的成員方法中所有需要拋出的異常。至此,Java中throws關鍵字相關內容講解先告一段落,更多內容請持續關注。
答疑如果大家有問題或想了解更多前沿技術,請在下方留言或評論,我會為大家解答。
上一章“全棧2019”Java異常第八章:throw關鍵字詳解
下一章“全棧2019”Java異常第十章:throw與throws區別詳解
學習小組加入同步學習小組,共同交流與進步。
方式一:關注頭條號Gorhaf,私信“Java學習小組”。方式二:關注公眾號Gorhaf,回復“Java學習小組”。全棧工程師學習計劃關注我們,加入“全棧工程師學習計劃”。
版權聲明原創不易,未經允許不得轉載!
本文發布于:2023-02-28 21:01:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167771680296610.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:throws(throws怎么讀).doc
本文 PDF 下載地址:throws(throws怎么讀).pdf
| 留言與評論(共有 0 條評論) |