1. 程式人生 > >異常及File類概述

異常及File類概述

異常 error exception file filenamefileter io流

一、異常

1、異常分類:

Throwable:Throwable類是 Java 語言中所有錯誤或異常的超類。它只有兩個子類

Error:屬於嚴重問題,只能避免;如內存溢出(OutOfMemory)

Exception:可以解決的異常問題

編譯時期異常:在寫代碼期間遇到的異常,不處理沒辦法運行;

運行時期異常(RuntimeException):在程序運行時期遇到的異常,一般情況不是編譯時期異常就是運行時期異常;

2、異常處理:

1)捕獲異常:try-catch-finally

A:格式:try{

有可能出現問題的代碼

}catch(異常類名 變量名){

//若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類概述