【学习笔记】JAVA基础——异常处理部分
生活随笔
收集整理的這篇文章主要介紹了
【学习笔记】JAVA基础——异常处理部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 簡介
- 一. try、catch與finally
- ① try && catch
- ② finally
- ③ throws
- 補充:JVM 相關
- 二. 異常的分類
- ① 分類解釋與思維導圖
- 三. 自定義異常
- 例子:Hero類的attack方法的isDeadException。
- 四. 上傳代碼到GIT
- ① 首先在github新建一個倉庫Java_Exception_Learn。
- ② 然后在IDEA的項目中設置
前言
摸魚了幾天,重新開始學習= =。
這次是摸回JAVA基礎的異常控制。之前一直都是直接用的IDEA的自動補全異常語句,但是隱約覺得這玩意還是得好好學習,所以今天抽空補補課。
學習網站是how2j,順便復習復習IDEA上傳到GIT的操作。( ̄??)
代碼上傳到git上了
簡介
異常的定義:導致程序的正常流程被終端的事件。
為啥要整這玩意:進行某個程序操作時,可能是一個潛在的錯誤操作,如果不預先做好異常處理,那么就會導致編譯錯誤。
一. try、catch與finally
① try && catch
- 一個try對應一或多個catch。
- try的代碼塊中只要遇到一個異常,就會直接中斷。
- 一組try && catch語句一般情況下只能拋出一個異常:因為遇到一個異常時,try代碼塊的運行就會直接中斷,后面的觸發異常語句不會被運行。不過可以通過其他方法來拋出多個異常,此處不展開說明。
- Exception類是所有異常類的父類。
因此,可以直接catch(Exception e),但是只限于只有一種異常的情況。 - 多異常代碼塊的處理:多個catch、一個catch
以上內容及更多內容可見以下兩份代碼塊內容
public class one {public static void main(String[] args){// 此處不會報錯,因為此時f只是一個定義了文件路徑的File類,并沒有真正訪問這個路徑File f = new File("/Users/fwy/Downloads/jojo.jpg");try{System.out.println("試圖打開不存在的文件jojo.jpg");new FileInputStream(f);System.out.println("成功打開");// }catch (FileNotFoundException e){ // FileNotFoundException:文件不存在 異常}catch (Exception e){ // Exception:所有異常的父類,可以直接用于捕捉異常。System.out.println("jojo.jpg不存在噢!");// printStackTrace():這玩意是用來打印方法的調用痕跡的// 控制臺的橙色部分就是該函數的打印內容// 在此例子中打印出了異常起始位置為第15行e.printStackTrace();// 打印 堆棧 痕跡}} } // 多異常捕捉 public class two {public static void main(String[] args){// 方法一:分別對不同異常進行catchFile f = new File("/Users/fwy/Downloads/QAQ.jpg");try{System.out.println("試圖打開不存在的文件QAQ.jpg");new FileInputStream(f);System.out.println("成功打開!");int[] arr = new int[10];System.out.println(arr[10]);// 實際上只能捕捉到一個異常,捕捉到異常后就會直接中斷// 比如本例中運行到18行就會直接中斷,數組越界部分不會涉及到} catch (FileNotFoundException e){System.out.println("文件不存在");e.printStackTrace();} catch (IndexOutOfBoundsException e){System.out.println("數組訪問越界");e.printStackTrace();}// 方法二:直接放在同一個catch里f = new File("/Users/fwy/Downloads/QVQ.jpg");try{System.out.println("試圖打開存在的文件QVQ.jpg");new FileInputStream(f);System.out.println("成功打開!");int[] arr = new int[10];System.out.println(arr[10]);} catch (FileNotFoundException | IndexOutOfBoundsException e){// 格式為 Exception1 | Exception2 e, IDE可以報出具體錯誤// 使用 instanceof 來區分異常,用于進行不同異常的處理if (e instanceof FileNotFoundException)System.out.println("文件不存在");else if (e instanceof IndexOutOfBoundsException)System.out.println("數組訪問越界");e.printStackTrace();}} }② finally
- 可以不寫
- 無論如何最后都會被執行
③ throws
- throw與throws區別:
throws:用于方法聲明,代表異常出現的可能性,不一定會發生。
throw: 出現于方法體內,實際上地拋出了異常對象 - throws的使用情況:
方法一調用方法二,方法二有異常但是選擇不處理,而是拋出給方法一,讓方法一處理。
理解起來可能比較繞,可以參考以下代碼:
這里是主函數調用方法一,方法一調用方法二的嵌套關系。
方法二出現異常后,由于方法二老渣男了,不想處理這個麻煩玩意,所以直接拋出給方法一。
方法一也不想當老實人,但是無奈打不過主函數,所以不能拋出給主函數,只能自己默默處理。
不過其實我們也可以選擇方法一繼續拋出給主函數,最終只要有一個地方進行try-catch的異常處理即可。
補充:JVM 相關
- 拋出異常語句(throw)都是通過 athrow 指令來實現(指令碼)。拋指令
- 異常捕獲語句(catch)早期也是指令,但現在是通過異常表實現。抓打表
二. 異常的分類
① 分類解釋與思維導圖
- Exception是所有異常的父類,Throwable是Exception和Error的父類
- Exception 異常:是程序本身可以處理的異常
- Error 錯誤:是程序無法處理的錯誤,大多為JVM出現的問題
- Throwable可以被throws拋出,但是catch的也要是Throwable類
思維導圖
圖片截自how2j
三. 自定義異常
定義:自定義一個異常類,繼承Exception。
用途:用于自定義類中需要的異常,比如定義銀行卡類,取款時可以拋出余額不足異常。
- 有參構造與無參構造:見代碼,主要是Exception的getMessage()的使用。
例子:Hero類的attack方法的isDeadException。
四. 上傳代碼到GIT
說明:記錄一下操作步驟= =,還是不太熟悉。
① 首先在github新建一個倉庫Java_Exception_Learn。
然后得到這個倉庫的地址(URL),用于IDEA中設置
② 然后在IDEA的項目中設置
- VCS - 導入到版本控制 - 創建Git存儲庫:選擇要上傳的項目
- 右鍵項目 - Git - 添加
- 右鍵項目 - Git - Commit目錄… :彈出窗口,在提交信息輸入想備注的東西,然后Commit
- 繼續彈出窗口,點擊定義遠程,在URL中輸入步驟①的URL即可
總結
以上是生活随笔為你收集整理的【学习笔记】JAVA基础——异常处理部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】26. 删除有序
- 下一篇: python字典会自动排序_python