Java學習經驗與總結(09)——異常與File類相關

一 異常

1 異常的概述

異常就是Java程序在運行過程中出現的錯誤。
異常的基類: Throwable
Exception分類:編譯時異常(非RuntimeException)、運行 時異常(RuntimeException)

2 異常處理的兩種方式

(1) try…catch…finally

try…catch處理異常的基本格式
try {
可能出現問題的代碼 ;
}catch(異常名 變量名){
針對問題的處理 ;
}finally{
釋放資源;
}

try…catch的方式處理多個異常
: try {
可能出現問題的代碼 ;
}catch(異常名1 變量名1){
對異常的處理方式 ;
}catch (異常名2 變量名2){
對異常的處理方式 ;
}
注意事項:
1,能明確異常,就明確;
2.多個異常類,平級關係,在前在後沒關係
3.多個異常類,存在繼承關係,父類放在最後

(2)throws

throw的概述以及和throws的區別:
throw的概述:
在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。
throws和throw的區別
throws
用在方法聲明後面,跟的是異常類名
可以跟多個異常類名,用逗號隔開
表示拋出異常,由該方法的調用者來處理
throws表示出現異常的一種可能性,並不一定會發生這些異常
throw
用在方法體內,跟的是異常對象名
只能拋出一個異常對象名
這個異常對象可以是編譯期異常對象,可以是運行期異常對象
表示拋出異常,由方法體內的語句處理
throw則是拋出了異常,執行throw則一定拋出了某種異常

3 編譯期異常和運行期異常的區別

(1)運行期異常

運行期異常:可以解決,也可不解決 (jvm處理)

解決方法:

  1. jvm處理(打印異常,並退出)

​ 2.try{}catch(Exoection e){}包圍;catch當try中出現異常,就會捕獲相應異常;try中發放入有可能出現錯誤的代碼;

(2)編譯期異常

編譯期異常: 必須解決

處理方法:

1, 將異常拋給調用者,誰用誰處理,俗稱甩鍋蓋(拋給虛擬機)採用 throws關鍵字在方法上進行拋出,拋給調用者,調用者處理

2.自己捕獲處理

4 異常注意事項

主要用於編譯期異常

1 子類重寫父類方法時,子類的方法必須拋出相同的異常或>父類異常的子類,或者子類不拋出異常也是可以的。
2 如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常,或者子類不拋出異常也是可以的。
3 如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
4 兩個類有繼承關係,子類在重寫父類方法時,父類方法沒有拋出異常時,子類不能拋出異常;只能自己處理;
5 子類不能拋出父類沒有拋過的異常
6 子類方法上拋出的異常不能比父類大
————————————————

二 finally關鍵字

1 finally關鍵字的特點和作用

特點 被finally控制的語句體一定會執行(前提 jvm沒有停止)
特殊情況:在執行到finally之前jvm退出了(比如System.exit(0)
作用 用於釋放資源,在IO流操作和數據庫操作中會見

2 final,finally和finalize的區別

final:
是一個狀態修飾符, 可以用來修飾類 , 變量 , 成員方法.
被修飾的類不能被子類繼承, 修飾的變量其實是一個常量不能被再次賦值
修飾的方法不能被子類重寫
finally:
用在try…catch…語句中 , 作用: 釋放資源 . 特點: 始終被執行(JVM不能退出)
finalize:
Obejct類中的一個方法,用來回收垃圾

三 File類

1 file類的構造方法

File(String pathname):根據一個路徑得到File對象
File(String parent, String child):根據一個目錄和一個子文件/ 目錄得到File對象
File(File parent, String child):根據一個父File對象和一個子文件/目錄得到File對象

2 file類的相關方法

creatNewFile() //創建文件,第一次創建 成功返回true,重複創建返回false
mkdir() //創建單級目錄,第一次創建成功 返回true,重複創建返回false
mkdirs()//創建多級目錄,第一次創建成功 返回true,重複創建返回false
delete()//刪除文件或空目錄,不走回收 站
renameTo(File a)//新名字需要進行File封裝; 當你源文件路徑和傳入文件路徑不一致時,改名並剪切;路徑一致時,改名;
isFile()//判斷是不是文件
isDirectory()//判斷是不是文件夾
exists()//判斷文件,文件夾是否存在
getName()//獲取文件名
length()//獲取文件長度,字節數
getAbsolutePath()//獲取絕對路徑,返回值String類型
getAbsoluteFile()//獲取絕對路徑,返回值爲File
getPath()//獲取相對路徑
getParent()//獲取父路徑 ,返回值String類型
getParentFile()//獲取父路徑 ,返回值爲File
totalSpace()//獲取盤符總空間
freeSpace()//獲取盤符剩餘空間
lastModified() //獲取最後一次修改時間
public String[] list()//獲取當前目錄下所有文件或文件夾的名稱
public String[] listFiles()//獲取當前目錄下所有文件或文件夾的File類型數組

四 一些案例演示

1 從銀行取錢,發現錢不夠,通過自定義異常給出提示。


public class myjavademo {

    public void main(String[] args) {
        int money = 2000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入取的金額:");
        int i = scanner.nextInt();
        if(i<=money){
            System.out.println("取錢成功");
            money-=i;
        }else{
            throw new  nomoneyException("沒錢了");
        }
    }
    public class nomoneyException extends RuntimeException {
        public nomoneyException(String s) {
            super (s);
        }
    }

}

2 判斷E盤指定目錄下是否有後綴名.jpg的文件,如果有,就輸出該文件名稱

public class myjavademo {

    public static void main(String[] args) {
        File file = new File("E:\\圖片");
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.getName().endsWith(".png"))
                System.out.println(file1.getName());
        }
    }

}

3 採用文件名稱過濾器方式,判斷D盤指定目錄下是否有後綴名.jpg的文件,如果有,就輸出該文件絕對路徑。

public class myjavademo {

 
        public static void main (String[]args){
            File file = new File("E:\\圖片");
            File[] files = file.listFiles(new FilenameFilter() {
              
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    if (file1.isFile() && file1.getName().endsWith(".png")) {
                        return true;
                    } else {
                        return false;
                    }
                }
            });
            for (File file1 : files) {
                String s = file1.getAbsolutePath();
                System.out.println(s);
            }
        }
    }

4 修改指定目錄下所有文件的名稱

public class myjavademo {


    public class 判斷圖片 {
        public void main(String[] args) {
            File file = new File("E:\\1\\新建文件夾");
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isFile() && file1.getName().endsWith(".mp4")) {
                    String name = file1.getName();
                    String s = "\\[www-itcast-cn\\]";//'[]'爲特殊字符需要轉義。前加‘\\’
                    String[] split = name.split(s);//分離[www-itcast-cn\\]
                    for (String s1 : split) {
                        File file2 = new File("E:\\1\\新建文件夾", s1);
                        file1.renameTo(file2);//同一路徑下換名,不同路徑剪貼換名
                    }
                }

            }
            File[] files1 = file.listFiles();
            for (File file1 : files1) {
                System.out.println(file1.getName());
            }
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章