日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【学习笔记】JAVA基础——异常处理部分

發布時間:2024/7/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】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的使用情況:
    方法一調用方法二,方法二有異常但是選擇不處理,而是拋出給方法一,讓方法一處理。
    理解起來可能比較繞,可以參考以下代碼:
    這里是主函數調用方法一,方法一調用方法二的嵌套關系。
    方法二出現異常后,由于方法二老渣男了,不想處理這個麻煩玩意,所以直接拋出給方法一。
    方法一也不想當老實人,但是無奈打不過主函數,所以不能拋出給主函數,只能自己默默處理。
public class three {// 同樣不處理異常public static void main(String[] args){method1();/*try{method1();} catch (FileNotFoundException e){e.printStackTrace();}*/}// 選擇在method1中處理異常private static void method1() //throws FileNotFoundException{//method2();try{method2();} catch (FileNotFoundException e){e.printStackTrace();}}// 不處理異常,而是拋出異常private static void method2() throws FileNotFoundException{File f = new File("/Users/fwy/Downloads/QAQ.jpg");System.out.println("試圖打開不存在的文件QAQ.jpg");new FileInputStream(f);System.out.println("成功打開");} }

不過其實我們也可以選擇方法一繼續拋出給主函數,最終只要有一個地方進行try-catch的異常處理即可。

補充:JVM 相關

  • 拋出異常語句(throw)都是通過 athrow 指令來實現(指令碼)。拋指令
  • 異常捕獲語句(catch)早期也是指令,但現在是通過異常表實現。抓打表

二. 異常的分類

① 分類解釋與思維導圖

  • Exception是所有異常的父類,Throwable是Exception和Error的父類
  • Exception 異常:是程序本身可以處理的異常
  • Error 錯誤:是程序無法處理的錯誤,大多為JVM出現的問題
  • Throwable可以被throws拋出,但是catch的也要是Throwable類
// 異常分類:1. 可查異常 // 2. 非可查異常:a.運行時異常 b.錯誤 public class one {public static void main(String[] args){// 1. 可查異常 CheckedException:必須處理的異常,catch | throws,否則編譯錯誤// 比如FileNotFoundExceptionFile f = new File("/Users/fwy/Downloads/QAQ.jpg");try{new FileInputStream(f);System.out.println("打開成功");}catch (FileNotFoundException e){e.printStackTrace();}// 2. 運行時異常 RuntimeException:不是必須處理的異常,不用catch | throws也可以編譯// 比如NullPointException,ArrayIndexOutOfBoundsException等// 設計原因:Java中此類錯誤太過普遍,都進行捕捉的話,代碼可讀性不好int k = 5/0;String s = null;s.length();// 3. 錯誤 Error:系統級別的異常,通常是內存溢出。同2一樣不要求強制捕捉StringBuffer sb = new StringBuffer();for (int i = 0; i < Integer.MAX_VALUE; i++){// 不斷增加字符導致內存用光,OutOfMemoryErrorsb.append('a');}} }

思維導圖

圖片截自how2j

三. 自定義異常

定義:自定義一個異常類,繼承Exception。
用途:用于自定義類中需要的異常,比如定義銀行卡類,取款時可以拋出余額不足異常。

  • 有參構造與無參構造:見代碼,主要是Exception的getMessage()的使用。
class Hero{String name;float hp;Hero(String name,float hp){this.name = name;this.hp=hp;}public void attack(Hero h) throws HeroIsDeadException{if(h.hp == 0)throw new HeroIsDeadException(h.name + "已經死了,別鞭尸了"); //使用throw而非throws拋出異常}class HeroIsDeadException extends Exception{public HeroIsDeadException() { } // 默認構造,信息更少,但是更方便public HeroIsDeadException(String msg) // 有參構造,導入異常原因,分析異常更方便{super(msg); // 可以使用getMessage()函數來獲取具體異常信息}} }public class one {public static void main(String[] args){Hero garen = new Hero("蓋倫",600);Hero teemo = new Hero("提莫",0);try{garen.attack(teemo);}catch (Hero.HeroIsDeadException e){System.out.println("異常的具體原因:" + e.getMessage());e.printStackTrace();}} }

例子:Hero類的attack方法的isDeadException。

四. 上傳代碼到GIT

說明:記錄一下操作步驟= =,還是不太熟悉。

① 首先在github新建一個倉庫Java_Exception_Learn。

然后得到這個倉庫的地址(URL),用于IDEA中設置

② 然后在IDEA的項目中設置

  • VCS - 導入到版本控制 - 創建Git存儲庫:選擇要上傳的項目
  • 右鍵項目 - Git - 添加
  • 右鍵項目 - Git - Commit目錄… :彈出窗口,在提交信息輸入想備注的東西,然后Commit
  • 繼續彈出窗口,點擊定義遠程,在URL中輸入步驟①的URL即可

總結

以上是生活随笔為你收集整理的【学习笔记】JAVA基础——异常处理部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。