異常及File類概述
一、異常
1、異常分類:
Throwable:Throwable類是 Java 語言中所有錯誤或異常的超類。它只有兩個子類
Error:屬於嚴重問題,只能避免;如內存溢出(OutOfMemory)
Exception:可以解決的異常問題
編譯時期異常:在寫代碼期間遇到的異常,不處理沒辦法運行;
運行時期異常(RuntimeException):在程序運行時期遇到的異常,一般情況不是編譯時期異常就是運行時期異常;
2、異常處理:
1)捕獲異常:try-catch-finally
A:格式:try{
有可能出現問題的代碼
}catch(異常類名 變量名){
問題處理
}finally{ //finally{}沒有必要可以不寫
一定會執行的代碼,一般用於釋放資源
}
若一段代碼有多個異常
方式一:
try{
}catch(){ //小異常類先catch
}chtch(){ //大異常類後catch
}finally{
}
方式二:
try{
}catch(異常類名1 | 異常類名2 | 異常類名3 變量名){
}finally{
}
B:Throwable常用方法:用於異常處理
如果try中代碼出現異常,jvm會自動生成一個異常對象用來與catch的參數異常類(只能比可能出現的異常大或者相等)作比較,如果相匹配那麽便執行catch中的代碼;
public string getMessage():返回的是一個異常的消息字符串
public String toString():返回的是一個簡單的描述信息
public void printStackTrace():描述異常信息,以及出現的具體位置在哪裏(開發中常用)
egg: import java.util.ArrayList;
public class ThrowableDemo {
public static void main(String[] args) {
demo1(); //by zero
demo2(); //java.lang.ArrayIndexOutOfBoundsException: 4
demo3(); /*java.lang.NullPointerException
at org.westos.exception.ThrowableDemo.demo3(ThrowableDemo.java:17)
at org.westos.exception.ThrowableDemo.main(ThrowableDemo.java:9)*/
}
private static void demo3() {
ArrayList<String> al = null;
try {
System.out.println(al.get(0));
} catch (NullPointerException e) { //空指針異常
e.printStackTrace();
}
}
private static void demo2() {
try {
int[] arr = {1,2,3};
System.out.println(arr[4]);
} catch (ArrayIndexOutOfBoundsException e) { //數組下角標越界異常
String string = e.toString();
System.out.println(string);
}
}
private static void demo1() {
try {
System.out.println(9/0);
} catch (ArithmeticException e) { //運算異常
String message = e.getMessage();
System.out.println(message);
}
}
}
C:final,finally,finalize區別:
final:最終的,修飾類 類不可被繼承;修飾成員方法 方法不能重寫;修飾成員變量 常量
finally:現在IO流中或者數據中,用來釋放資源;在try-catch中屬於必須執行的
finalize():是Object的方法,與垃圾回收器有關,調用System.gc()實際上是調用了重寫了Object的finalize()方法
D:catch中含有return的情況
當catch中需要返回值,最終返回的值便是它,無論後面finally中是否對該值有沒有修改
finally中修改的只是該值,返回值還是由catch中return決定,若finally中也有return就另說;
egg: public class FinallyDemo {
public static void main(String[] args) {
System.out.println("返回值 = " + getint()); //返回值 = 20
}
public static int getint(){
int a = 10;
try {
System.out.println(a/0);
} catch (ArithmeticException e) {
a = 20;
return a; ////這裏面形成了一種回路徑
} finally {
a = 30;
System.out.println("a = " + a); //a = 30
}
return a;
}
}
2)拋出異常:throws
A:格式:在方法上拋出
public static void show() throws 異常類名{} //同樣拋出異常只能往大裏拋,最好和可能出現的異常相同
註意;不建議在main()方法上拋出異常
B:throws和throw的區別
throws:一般在方法聲明上拋出
拋出的是一個異常類名,可以拋出多個異常,中間用逗號隔開
throws表示拋出異常,這段代碼可能會拋出異常
一般情況:throws用的比較多
throw:一般在方法中進行拋出
拋出的是一個異常對象(匿名對象的方式)
throw:表示拋出:肯定的拋出異常(具體異常),走到這塊代碼,一定會執行throw中的異常
在語句中進行處理
egg: public static void method() throws Exception{
int a = 10;
int b = 0;
if(b == 0){
throw new Exception();//直接指定的異常:大方向的異常
}else{
System.out.println(a/b);
}
}
C:註意事項:
如果子類重寫的父類的方法有異常拋出,那麽子類重寫的方法只能拋出比父類方法小的異常,或者一樣;
如果父類的方法沒有異常拋出,那麽,子類重寫的方法也不能拋出異常,只能進行異常捕獲
3、自定義異常類
自定義異常類:
1)必須繼承Exception或者RuntimeException
2)必須有構造方法,以便jvm生成自定義異常類對象
3)可有有一些自己的異常處理方法
二、File類
1、概述:文件和目錄路徑名的抽象表示形式;可以把一個文件或者目錄封裝成一個對象;
2、構造方法:
File(String pathname):將該路徑名稱的文件或者目錄封裝成了一個File實例(常用)
File(String parent, String child):將parent目錄裏面的child文件封裝成一個File實例
File(File parent, String child):將File類型的parent目錄裏得child文件封裝成一個File實例
egg: File file = new File("e:\\Demo\\a.txt"); // 絕對路徑
File file = new File("a.txt"); //相對路徑;在該項目下
3、常用方法
public boolean createNewFile throws IOException():表示創建文件,返回true,若文件存在返回false創建失敗
public boolean mkdir():創建文件夾/目錄,如果存在該文件夾,就不需要創建
public boolean mkdirs():創建多個文件夾/目錄,只要路徑上了目錄不存在就創建
egg: File file = new File("e:\\a\\b\\c\\d\\e");
file.mkdirs(); //就會創建a b c d e目錄
public boolean delete():刪除此抽象路徑名表示的文件或目錄
//一次只能刪除一個最頂層的文件或目錄,且不能刪除有文件或者目錄的目錄;
//該輸出方式不經過回收站,不能找回;
public boolean renameTo(File dest):重命名
//兩個文件路徑一致,只會重命名
//兩個文件路徑不一致,不僅重命名,還會剪切,將前者移動到renameTo參數所在的目錄下;
判斷功能:
public boolean isAbsolute():判斷該路徑是否是絕對路徑
public boolean isFile()判斷此文件是否為一個標準文件
public boolean isHidden():判斷此抽象路徑表示的文件是否是一個隱藏文件
public boolean canRead():是否可讀
public boolean canWrite():是否可寫
獲取功能:
public String getAbsolutePath():獲取絕對路徑
public STring getPath():獲取相對路徑
public String getName():獲取文件或者目錄的名稱
public long length():獲取文件的長度
public long lastModified():返回次抽象路徑文件最後一次被修改的時間,返回的修改時間的一個毫秒值
//使用Date SimpleDateFormat類可以將其轉換成String類型
egg: File file = new File("e:\\demo\\a.txt");
Date date = new Date(file.LastModified());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(date);
System.out.println(s);
public String[] list():獲取指定盤符下的所有的文件以及文件夾的名稱數組
public File[] listFiles():獲取指定盤符下的所有文件以及文件夾的File對象數組(常用)
egg:
4、文件名稱過濾器 —— FilenameFileter接口
public File[] listFiles(FileFilter filter)
public String[] list(FilenameFilter filter)(常用)
egg:
異常及File類概述