java基礎筆記之異常和File類


----自己總結寫的,寫的不好,請多指點
知識點:
一般會把字符串放在equals前面,防止空指針異常
異常:
分類:
throwable:
Error :服務器宕機,數據庫崩潰
Exception: //常說的異常
編譯期異常: 非RuntimeException及其子類
運行期異常: RuntimeException及其子類
Throwable成員方法:
public String getMessage(); //獲取異常信息
public String toString(); //獲取異常類型,異常信息
public void printStackTrace(); //獲取異常類型,異常信息,以及異常出現的位置.
處理異常的兩種方式:
 1:try…catch…finally//解決完程序會繼續執行
try:用來檢測異常的
catch:用來捕獲異常
finally:釋放異常
格式1:處理一個異常
try{
//可能出問題的代碼;
}catch(異常類型 變量名) {
//出問題後的解決方案
}finally{
//釋放資源
}

格式2:處理多個異常
try{
//可能出問題的代碼;
}catch(異常類型1 變量名) {
//出問題後的解決方案
}catch(異常類型2 變量名) {
//出問題後的解決方案
}catch(異常類型3 變量名) {
//出問題後的解決方案
}finally{
//釋放資源
}
注意:try跟多個catch,小的放前面,大的必須放後面.
原因:根據多態的原理,大的放前面,就會將所有的子類對象接收,後面的就沒意義

格式3: 實際開發的寫法
try {
//可能出問題的代碼
} catch (Exception e) {
e.printStackTrace();
} finally {
//釋放資源的
}
finally 關鍵字:
作用: 一般是用來釋放資源的.
特點: 正常情況: 裏邊的代碼一定會執行.
特殊情況: 還沒有執行到finally裏邊的代碼時,JVM已經退出了.

 B:throws
如果拋出的是編譯期異常,調用者必須處理.
如果拋出的是運行時異常,調用者可以不用顯示處理.
自定義異常:
其實就是我們自定義一個類去繼承Exception或者RuntimeException.
然後自動生成下 構造方法即可.

注意事項:
1: 子類不能出現父類沒有的異常.
2: 父類如果沒有異常,子類有異常只能try,不能拋.
3: 關於異常的處理,能try就try,try不了就拋.

File類:
概述: 用來操作文件(夾), 其實嚴格來講, 它是用來操作 路徑的.
路徑的分類:
絕對路徑: 以盤符開頭的路徑,是一個固定的,寫"死"的路徑.
相對路徑: 相對於某個路徑而言. 一般是相對於當前項目來講的.

構造方法:
public File(String name);//根據一個路徑得到File對象
public File(String parent,String child);//:根據一個目錄和一個子文件/目錄得到File對象
public File(File parent,String child);//根據一個父File對象和一個子文件/目錄得到File對象
File類成員方法:
A:創建功能
    * public boolean createNewFile():創建文件 如果存在這樣的文件,就不創建了
//返回值是boolean值,如果沒有就創建,返回true

    * public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了返回值是boolean值,如果沒有就創建,返回true
    * public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來
返回值是boolean值,如果沒有就創建,返回true

    * 注意事項:
        * 如果你創建文件或者文件夾忘了寫盤符路徑,那麼,默認在項目路徑下。

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

C:判斷功能
    * public boolean isDirectory():判斷是否是目錄
    * public boolean isFile():判斷是否是文件
    * public boolean exists():判斷是否存在
    * public boolean canRead():判斷是否可讀
    * public boolean canWrite():判斷是否可寫
    * public boolean isHidden():判斷是否隱藏

 D:獲取功能
    * public String getAbsolutePath():獲取絕對路徑
    * public String getPath():獲取構造方法中的,一般獲取相對路徑路徑
    * public String getName():獲取名稱
    * public long length():獲取長度。字節數
    * public long lastModified():獲取最後一次的修改時間,毫秒值
    * public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
    * public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組 
File[] dirFiles = file.listFiles(new FilenameFilter() {//文件過濾器
@Override
public boolean accept(File dir, String name) {
File newFile =new File(dir,name);
return newFile.isFile()&&newFile.getName().endsWith(".jpg");
}
});
面試題:
記憶:
1.try跟多個catch,小的放前面,大的必須放後面.
2.jdk1.7新特性,多個catch語句裏面的異常類型合併成一個
3.try 執行後,後面的程序會執行,throw拋出異常後面的語句不會執行

1.main是怎麼處理異常的?
方式一:自己處理,程序繼續運行
方式二:交給JVM處理,,JVM有一個默認的異常處理異常機制,會將異常信息,異常名稱,一場出現的
2.編譯期異常和運行期異常的區別?
編譯時異常: 必須顯示處理,否則程序就會發生錯誤,無法通過編譯
運行時異常:  無需顯示處理
3.throws和throw的區別?
throws
        * 用在方法聲明後面,跟的是異常類名
        * 可以跟多個異常類名,用逗號隔開
        * 表示拋出異常,由該方法的調用者來處理
 throw
        * 用在方法體內,跟的是異常對象名
        * 只能拋出一個異常對象名
        * 表示拋出異常,由方法體內的語句處理
 4.如果沒有finally,後面的代碼也會執行,那麼finally有和沒有的區別是什麼?(假設finally一定會執行的正常情況下)?
如果catch中有return語句,finally裏邊的代碼也會執行,如果不加finally,代碼是執行不了的.
5: final,finally,finalize 三者的區別是什麼?
final:
用來修飾類,成員方法,成員變量的.修飾的類不能被繼承,但是可以繼承別的類,
修飾的方法不能被子類重寫,修飾的變量是一個常量.
finally:
是try-catch-finally語句體的一部分,一般是用來釋放資源的,正常情況下,裏邊的代碼肯定會執行.
finalize:
它是Object類中的一個方法,當對象變成垃圾的時候,由GC來調用該對象的finalize()方法回收對象.
6: 異常的處理方式有幾種,他們的區別是什麼?
try-catch-finally: 處理完後,程序會繼續執行.
throws:處理完後,程序會終止運行.




一個關於"異常"的經典的題:
public static void main(String[] args) {
System.out.println(method()); //打印結果是多少?
}
public static int method() {
int num = 10;
try {
System.out.println(1/0);
} catch (Exception e) {
num = 20;
return num; //return做了兩件事情,第一:先創建一個返回路徑,記錄住要返回的值,
//這個時候,檢測到還有finally,所以會去執行下finally裏邊的內容,
//執行完finally裏邊的內容後,會將之前返回路徑記錄住的值返回
}finally {
num = 30;
System.out.println("我執行了嗎?");
}
return num;
}

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