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
- a:try…catch…finally
- 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。
- a:getMessage()
- 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("年齡非法"); } }
- a:throws
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是一個方法,當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
- final可以修飾類,不能被繼承
- final,finally和finalize的區別
- B:面試題2
- 如果catch裏面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return後。
- 會執行,在return之前執行。
- 如果catch裏面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在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指的是當前路徑
- 文件和目錄路徑名的抽象表示形式
- File更應該叫做一個路徑
- 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總結
把今天的知識點總結一遍。