1. 程式人生 > >異常、File類+JAVA學習筆記-DAY19

異常、File類+JAVA學習筆記-DAY19

19.01_異常(異常的概述和分類)

  • A:異常的概述
    • 異常就是Java程式在執行過程中出現的錯誤。
  • B:異常的分類
    • 通過API檢視Throwable
    • Error
      • 伺服器宕機,資料庫崩潰等
    • Exception
      C:異常的繼承體系
    • Throwable
      • Error
      • Exception
        • RuntimeException

19.02_異常(JVM預設是如何處理異常的)

  • A:JVM預設是如何處理異常的
    • main函式收到這個問題時,有兩種處理方式:
    • a:自己將該問題處理,然後繼續執行
    • b:自己沒有針對的處理方式,只有交給呼叫main的jvm來處理
      • jvm有一個預設的異常處理機制,就將該異常進行處理.
      • 並將該異常的名稱,異常的資訊.異常出現的位置列印在了控制檯上,同時將程式停止執行
  • B:案例演示
    • JVM預設如何處理異常

19.03_異常(try…catch的方式處理異常1)

  • A:異常處理的兩種方式
    • a:try…catch…finally
      • try catch
      • try catch finally
      • try finally
    • b:throws
  • B:try…catch處理異常的基本格式
    • try…catch…finally
  • C:案例演示

    • try…catch的方式處理1個異常

      try:用來檢測異常的
      catch:用來捕獲異常的
      finally:釋放資源

      try{
              int x = 10/0;
              System.out.println(x);
          }catch(ArithmeticException a) {     //ArithmeticException a = new ArithmeticException();
              System.out.println("出錯了,除數為零了");
          }
      
      System.out.println("1111111111111111");
      

19.04_異常(try…catch的方式處理異常2)

  • A:案例演示

    • try…catch的方式處理多個異常

      int a = 10;
      int b = 0;
      int[] arr = {11,22,33,44,55};
      
      try {
          System.out.println(a / b);
          System.out.println(arr[10]);
          arr = null;
          System.out.println(arr[0]);
      } catch (ArithmeticException e) {
          System.out.println("除數不能為零");
      } catch (ArrayIndexOutOfBoundsException e) {
          System.out.println("索引越界了");
      } catch (Exception e) {             //Exception e = new NullPointerException();
          System.out.println("出錯了");
      }
      
      System.out.println("over");
      
    • JDK7以後處理多個異常的方式及注意事項

19.05_異常(編譯期異常和執行期異常的區別)(面試題)

  • A:編譯期異常和執行期異常的區別

    • Java中的異常被分為兩大類:編譯時異常和執行時異常。
    • 所有的RuntimeException類及其子類的例項被稱為執行時異常,其他的異常就是編譯時異常

    • 編譯時異常

      • Java程式必須顯示處理,否則程式就會發生錯誤,無法通過編譯
      • 編譯時異常:在編譯某個程式的時候,有可能會有這樣那樣的事情發生,比如檔案找不到,這樣的異常就必須在編譯的時候處理
        如果不處理編譯通不過
    • 執行時異常
      • 無需顯示處理,也可以和編譯時異常一樣處理
      • 就是程式設計師所犯得錯誤,需要回來修改程式碼
  • B:案例演示
    • 編譯期異常和執行期異常的區別

19.06_異常(Throwable的幾個常見方法)

  • A:Throwable的幾個常見方法
    • a:getMessage()
      • 獲取異常資訊,返回字串。
    • b:toString()
      • 獲取異常類名和異常資訊,返回字串。
    • c:printStackTrace()
      • 獲取異常類名和異常資訊,以及異常出現在程式中的位置。返回值void。
  • B:案例演示
    • Throwable的幾個常見方法的基本使用

19.07_異常(throws的方式處理異常)

  • A:throws的方式處理異常
    • 定義功能方法時,需要把出現的問題暴露出來讓呼叫者去處理。
    • 那麼就通過throws在方法上標識。
  • B:案例演示
    • 舉例分別演示編譯時異常和執行時異常的丟擲

19.08_異常(throw的概述以及和throws的區別)

  • A:throw的概述
    • 在功能方法內部出現某種情況,程式不能繼續執行,需要進行跳轉時,就用throw把異常物件丟擲。
  • B:案例演示
    • 分別演示編譯時異常物件和執行時異常物件的丟擲
  • C:throws和throw的區別(面試題)

    • a:throws
      • 用在方法聲明後面,跟的是異常類名
      • 可以跟多個異常類名,用逗號隔開
      • 表示丟擲異常,由該方法的呼叫者來處理
    • b:throw

      • 用在方法體內,跟的是異常物件名
      • 只能丟擲一個異常物件名
      • 表示丟擲異常,由方法體內的語句處理

        public void setAge(int age) throws AgeOutOfBoundsException {
                if(age >0 && age <= 150) {
                    this.age = age;
                }else {
                    //Exception e = new Exception("年齡非法");
                    //throw e;
                    throw new RuntimeException("年齡非法");
                }
            }
        

19.09_異常(finally關鍵字的特點及作用)

  • A:finally的特點
    • 被finally控制的語句體一定會執行
    • 特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
  • B:finally的作用
    • 用於釋放資源,在IO流操作和資料庫操作中會見到
  • C:案例演示
    • finally關鍵字的特點及作用

19.10_異常(finally關鍵字的面試題)

  • A:面試題1
    • final,finally和finalize的區別
      • final可以修飾類,不能被繼承
        • 修飾方法,不能被重寫
        • 修飾變數,只能賦值一次
      • finally是try語句中的一個語句體,不能單獨使用,用來釋放資源
      • finalize是一個方法,當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。
  • B:面試題2
    • 如果catch裡面有return語句,請問finally的程式碼還會執行嗎?如果會,請問是在return前還是return後。
      • 會執行,在return之前執行。

19.11_異常(自定義異常概述和基本使用)

  • A:為什麼需要自定義異常
    • 舉例:人的年齡
  • B:自定義異常概述
    • 繼承自Exception
    • 繼承自RuntimeException
  • C:案例演示
    • 自定義異常的基本使用

19.12_異常(異常的注意事項及如何使用異常處理)

  • A:異常注意事項
    • a:子類重寫父類方法時,子類的方法必須丟擲相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
    • b:如果父類丟擲了多個異常,子類重寫父類時,只能丟擲相同的異常或者是他的子集,子類不能丟擲父類沒有的異常
    • c:如果被重寫的方法沒有異常丟擲,那麼子類的方法絕對不可以丟擲異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
  • B:如何使用異常處理

    • 原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由呼叫者處理,這是用throws
    • 區別:

      • 後續程式需要繼續執行就try
      • 後續程式不需要繼續執行就throws
    • 如果JDK沒有提供對應的異常,需要自定義異常。
      繼承自Exception或者RuntimeException,只需要提供無參構造和一個帶參構造即可

19.13_異常(練習)

  • 鍵盤錄入一個int型別的整數,對其求二進位制表現形式
    • 如果錄入的整數過大,給予提示,錄入的整數過大請重新錄入一個整數BigInteger
    • 如果錄入的是小數,給予提示,錄入的是小數,請重新錄入一個整數
    • 如果錄入的是其他字元,給予提示,錄入的是非法字元,請重新錄入一個整數

19.14_File類(File類的概述和構造方法)

  • A:File類的概述
    • File更應該叫做一個路徑
      • 檔案路徑或者資料夾路徑
      • 路徑分為絕對路徑和相對路徑
      • 絕對路徑是一個固定的路徑,從碟符開始
      • 相對路徑相對於某個位置,在eclipse下是指當前專案下,在dos下
    • 檢視API指的是當前路徑
    • 檔案和目錄路徑名的抽象表示形式
  • B:構造方法
    • File(String pathname):根據一個路徑得到File物件
    • File(String parent, String child):根據一個目錄和一個子檔案/目錄得到File物件
    • File(File parent, String child):根據一個父File物件和一個子檔案/目錄得到File物件
  • C:案例演示
    • File類的構造方法

19.15_File類(File類的建立功能)

  • A:建立功能
    • public boolean createNewFile():建立檔案 如果存在這樣的檔案,就不建立了
    • public boolean mkdir():建立資料夾 如果存在這樣的資料夾,就不建立了
    • public boolean mkdirs():建立資料夾,如果父資料夾不存在,會幫你創建出來
  • B:案例演示

    • File類的建立功能

    • 注意事項:

      • 如果你建立檔案或者資料夾忘了寫碟符路徑,那麼,預設在專案路徑下。

19.16_File類(File類的重新命名和刪除功能)

  • A:重新命名和刪除功能
    • public boolean renameTo(File dest):把檔案重新命名為指定的檔案路徑
    • public boolean delete():刪除檔案或者資料夾
  • B:重新命名注意事項
    • 如果路徑名相同,就是改名。
    • 如果路徑名不同,就是改名並剪下。
  • C:刪除注意事項:
    • Java中的刪除不走回收站。
    • 要刪除一個資料夾,請注意該資料夾內不能包含檔案或者資料夾

19.17_File類(File類的判斷功能)

  • A:判斷功能
    • public boolean isDirectory():判斷是否是目錄
    • public boolean isFile():判斷是否是檔案
    • public boolean exists():判斷是否存在
    • public boolean canRead():判斷是否可讀
    • public boolean canWrite():判斷是否可寫
    • public boolean isHidden():判斷是否隱藏
  • B:案例演示
    • File類的判斷功能

19.18_File類(File類的獲取功能)

  • A:獲取功能
    • public String getAbsolutePath():獲取絕對路徑
    • public String getPath():獲取路徑
    • public String getName():獲取名稱
    • public long length():獲取長度。位元組數
    • public long lastModified():獲取最後一次的修改時間,毫秒值
    • public String[] list():獲取指定目錄下的所有檔案或者資料夾的名稱陣列
    • public File[] listFiles():獲取指定目錄下的所有檔案或者資料夾的File陣列
  • B:案例演示
    • File類的獲取功能

19.19_File類(輸出指定目錄下指定字尾的檔名)

  • A:案例演示
    • 需求:判斷E盤目錄下是否有後綴名為.jpg的檔案,如果有,就輸出該檔名稱

19.20_File類(檔名稱過濾器的概述及使用)

  • A:檔名稱過濾器的概述
    • public String[] list(FilenameFilter filter)
    • public File[] listFiles(FileFilter filter)
  • B:檔名稱過濾器的使用
    • 需求:判斷E盤目錄下是否有後綴名為.jpg的檔案,如果有,就輸出該檔名稱
  • C:原始碼分析
    • 帶檔名稱過濾器的list()方法的原始碼

19.21_File類(遞迴)

  • 5的階乘

19.22_day19總結

把今天的知識點總結一遍。