国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java基礎——異常機制

2019-11-14 23:09:13
字體:
來源:轉載
供稿:網友
java基礎——異常機制
【捕獲異常】

硬件的錯誤、輸入錯誤、物理限制等問題,都可能導致程序運行時的異常出現。

1.異常的分類層次

在java中,異常對象都是由Throwable類繼承而來的,主要分為兩大類:

Error和Exception類。

在Exception中又分為:

RuntimeException異常和非RuntimeException異常。

異常的分類有以下幾種:

1.Error類層次的結構主要描述了java運行時系統的內部錯誤和資源耗盡等錯誤,如硬件錯誤、輸入錯誤數據、系統崩潰等。出現這些系統內部的問題,除了通知用戶并盡量安全退出,基本上程序員也無能為力了,所以這種情況一般不要求解決,當然,這種情況也很少出現。

2.RuntimeException的異常時指運行時異常,也稱為未檢查異常。一般是由于程序員自己的問題造成的,如錯誤的類型轉換、數組訪問越界、訪問空指針等。這些都是可以通過程序員的細心處理和認真分析來避免的。如在轉換類型時檢查,通過檢查下標來防止越界,使用變量前檢查是否為空來杜絕空指針異常。

3.非RuntimeException異常,也就是已檢查異常。常見的已檢查異常主要有以下幾種:java.io.IOEeception(IO異常,輸入輸出設備不存在,比如在文件的末尾讀取數據)和java.io.FileNotFoundException(文件未找到異常)和java.lang.ClassNotFoundException(動態地裝載某個類時,找不到此類)

注意:對于已檢查異常必須處理,對于未檢查異常可以處理也可以不處理

Java異常類層次結構圖:

2.捕獲和處理異常

語法規則:

  • 返回類型方法名(參數)
  • {
  • try{
  • 可能出現的異常語句A
  • 可能出現的異常語句B
  • 可能出現的異常語句C
  • }
  • catch(異常類e){
  • //某種異常的引用
  • 異常處理的語句D
  • }
  • finally{
  • 最終一定會執行的語句E
  • }
  • 其他語句F
  • }

finally語句塊內的語句無論在什么時候在什么情況下都會被執行,經常會寫一些釋放資源的語句。如果前面語句中有一個return的值,finally中也有一個return的值,那么返回的一定是fianlly中return的值。

finally和catch可以省略其中的一個,但是不能同時省略

示例:

上面代碼中case的前四句話必定會拋出異常:

case:0是零做了除數;

case:1是數組沒有賦值,也就是沒有初始化就使用

case:2是數組越界

case: 3是字符串越界

結果:

3.異常的匹配

如果try語句后跟多個catch語句,那么排列的先后順序如下所示:

1.如果多個catch語句塊中所指定的異常類型級別相同或者沒有任何派生關系,則catch語句排列無序。2.如果多個catch語句塊中所指定的異常類型相互之間有派生關系,則必須子類型的異常寫在上面,父類型的異常寫在下面。


【自定義和拋出異常】

1.自定義異常

當系統中已有的異常類型不能滿足使用要求時,可以根據自己的需要拋出自定義異常的對象。自定義異常類一般通過充當捕獲異常的角色,所以從Exception類或者其他的捕獲異常類繼承就可以了其語法格式如下:

  • class類名extendsException{
  • 類體;
  • }

自定義的異常類一般都會編寫必要的構造方法和一些適當的功能方法,而且一般都會有兩個構造方法:

一個是無參的構造方法

一個是以字符串做參數的構造方法

以字符串做參數的構造方法可以在有出錯信息的情況下創建異常對象。

示例:

  • //自定義異常類ReportNotFoundException,有兩個構造方法
  • publicclassReportNotFoundExceptionextendsException{
  • ReportNotFoundException(){
  • }
  • ReportNotFoundException(Stringmesg){
  • super(mesg);//創建異常對象
  • }
  • }

2.拋出異常

在聲明或者方法中拋出異常,主要內容和使用方法如下:在編程中會遇到很多異常,如果該程序有能力解決,可以用try/catch方法主動獲取和處理異常。當不具備對異常進行處理的能力時,則向上拋出異常,直到拋到能夠處理異常的位置。

拋出異常的語法是:

  • 訪問限制修飾符[static]方法名(參數列表)throws異常序列{
  • 方法體;
  • }

比如,有一個m方法拋出了IOException和InterruptedException。代碼如下:

  • publicvoidm()throwsIOException,InterruptedException{
  • 方法體;
  • }

throws用來聲明該方法將有可能拋出的異常,將可能拋出的異常列在throws后面,用逗號隔開

在方法體中處理異常的時候,也可以將這兩種捕獲異常再拋出,使用throws語句就可以將一個異常對象拋出語法格式為:

  • thrownew異常對象;

當一個方法中出現異常,而沒有處理,則以異常對象為返回值返回調用處,然后逐級傳遞。如果一直沒有捕獲和處理,最終異常將返回虛擬機,虛擬機終止退出,程序結束。

示例:

自定義異常:

  • //自定義異常類ReportNotFoundException,有兩個構造方法
  • publicclassReportNotFoundExceptionextendsException{
  • ReportNotFoundException(){
  • }
  • ReportNotFoundException(Stringmesg){
  • super(mesg);//創建異常對象
  • }
  • }

職員及相應方法:

  • publicclassEmployee{//定義公開的職員類型
  • Stringname;
  • publicEmployee(Stringname){
  • this.name=name;
  • }
  • publicStringgetReport()throwsReportNotFoundException{
  • //定義職員找報表的方法,找不到報表就報自定義異常
  • if(Math.random()>0.7){//設定找到報表的幾率是70%
  • thrownewReportNotFoundException(name+"找不到報表");
  • }
  • returnname+",報表找到了";
  • }
  • }
  • classManager{//定義經理類
  • Employee[]es;//職員數組
  • publicManager(Employee[]es){
  • super();
  • this.es=es;
  • }
  • publicStringgetReport()throwsReportNotFoundException{
  • //定義經理找報表的方法
  • StringBuffersb=newStringBuffer();//StringBuffer定義經常變化的字符串
  • for(inti=0;i<es.length;i++){
  • sb.append(es[i].getReport());//經理讓所有職員找報表
  • }
  • returnsb.toString();
  • }
  • }
  • classCFO{//定義CFO類
  • Manager[]ms;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 将乐县| 翁源县| 巴彦县| 秦安县| 莱西市| 抚州市| 喀什市| 鹿泉市| 历史| 嘉祥县| 富顺县| 綦江县| 许昌县| 建湖县| 宜川县| 泽普县| 额济纳旗| 交城县| 镇原县| 山丹县| 秀山| 泌阳县| 德庆县| 昭通市| 时尚| 松桃| 石柱| 碌曲县| 康保县| 鲜城| 余庆县| 揭西县| 湖口县| 峡江县| 文水县| 南召县| 肥城市| 安新县| 西吉县| 沂源县| 太仆寺旗|