Java初級筆記_IO流_1

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

一、異常

    A:概述

        異常:程序在運行過程中發生由於硬件設備問題、軟件設計錯誤等導致的程序異常事件。說白了,就是程         序的非正常情況。
        在Java等面向對象的編程語言中,異常本身是一個類,產生異常就是產生了一個異常對象。

     B:繼承體系結構

        

    C:分類

        嚴重錯誤:無法通過處理的錯誤。
        運行時異常:運行時可能會報錯,可以不處理。如數學異常。
        編譯時異常:編譯時無法編譯通過。如日期格式化異常

      D:異常處理

        jvm的默認處理方式:
  默認情況下,jvm會採用默認處理方案:
  把異常的全路徑名稱,原因,及位置等信息顯示出來。

   注意:
  如果是jvm的默認處理方式,那麼,它會在出問題的地方結束。

        異常處理步驟:

    1、創建異常對象(JDK已定義的異常會自動創建對象,自定義異常需要手動創建)

            2、拋出異常(JDK已有定義的異常會自動過拋出異常,自定義異常需手動拋出)

            3、處理異常       

        將異常捕獲並處理

             try...catch...finally
基本格式:
try {
可能有問題的代碼;
}catch(異常對象) {
對問題的處理;
}finally {
釋放資源;
}


變形格式:
try...catch
try...catch...catch
try...catch...catch...finally
try...finally

              多異常捕獲處理:
分別捕獲分別處理,每個try對應一個catch
集中捕獲分別處理,一個try對應所有catch
          注意:大的異常不能在前邊捕獲
一次捕獲共同處理
注意:不能同時捕獲大的異常與小的異常

聲明拋出異常與拋出異常

      throws:用於聲明函數拋出異常。用於函數聲明。是異常對象的處理方式之一。
                      多個異常可以同時聲明拋出,用逗號分隔。
              throw:用於拋出異常對象。用於函數內容。
                     當出現JDK異常對象時,JVM會自動創建一個異常對象並拋出。
                     自定義異常對象可以先創建異常對象,再使用throw拋出。拋出後再進行處理:或使用捕獲或使用聲明拋                      出。

         自定義異常

             如果涉及其他需求,JDK沒有提供相應的異常對象,則可以自己定義異常。
             定義格式:繼承Exception或者RuntimeException。同時需要帶參的構造方法,用於接收異常信息。
class MyException{
public MyException(String message){
super(message);
}
}

        異常常見方法

                重寫了toString方法
public String getMessage()
public void printStackTrace()
public void printStackTrace(PrintStream s) 
 

        異常處理注意細節

             如果多個異常,有子父關係,父異常一定要放在最後。
如果多個異常,是平級關係,它們存在的位置沒有順序關係。

            執行順序:

在try裏面的代碼會按照從上往下執行,一旦發生問題,
就會產生一個異常對象,去和catch裏面進行匹配。
有對應的匹配,就走對應的處理方案。
沒有,就找父匹配,有就走對應的處理方案。
如果找不到,那麼就由jvm採用默認處理方案。

  JDK7的新特性:在處理多個平級的異常的時候
catch(ExceptionA | ExceptionB | ExceptionC ... e) {

}

    E:面試題:
A:Exception和RuntimeException的區別?
Exception:分爲編譯期異常和運行期異常。編譯期異常是必須處理的。否則,代碼不能編譯通過。
RuntimeException:運行期異常,不需要編寫異常處理代碼,但是可能需要修正程序參數或者邏輯代碼。
B:throws和throw的區別?
throws:在方法聲明上,後面跟的是異常類名。
throws聲明後面如果是一個運行時期異常,調用者不需要處理。這種方式沒有意義。
throws聲明後面跟的是一個編譯期異常,調用者是必須處理的。
throw:在方法體中,後面跟的是異常對象名。
throw後面如果拋出的是運行時期異常對象,那麼方法上是不需要進行聲明的。
throw後面如果拋出的是編譯時期異常對象,那麼,一般在方法聲明上都是要用throws聲明該方法有                         異常。
C:finally的面試題
a:final,finally,finalize的特點及區別?
b:如果catch裏面有return,請問finally裏面的代碼還執行嗎?
如果執行,是在return前,還是後呢?
c:寫一個程序,測試finally裏面的操作對結果沒有影響。
finally一般只用於釋放資源。
D:jvm的默認處理方式?
       F:怎麼選擇
A:能夠自己處理的時候,儘量自己處理。
B:在main方法裏面儘量不要拋。
C:將來在實際開發中,我們會把不同的異常給出不同的界面進行顯示給用戶。
       G:子父關係中的異常處理
class Fu {
public void show() throws Exception{

}
}

class Zi extends Fu {
public void show()  throws RuntimeException{
 
}
}

class Demo {
public static void main(String[] args) {

}
}

子的重寫方法中不能拋出比父更大的異常。

二、File

      (1)File概述:

            將文件路徑或者文件夾路徑封裝成的類。實際代表該路徑下的文件或者文件夾。方便對文件與文件夾的屬性信息進行             操作。

      (2)理解

            因爲硬盤上對數據的存儲基本上都是以文件存在。爲了方便對文件或者文件夾進行操作。java就提供了一個類File             供我們使用。本質上是對路徑的封裝。
      (3)File類構造方法
A:File file = new File("d:\\a.txt");
B:File file = new File("d:\\","a.txt");
C:File file = new File("d:");
File file2 = new File(file,"a.txt");
  以上三種格式等價。
  (4)File類的功能:
A:創建功能
創建文件:createNewFile()

創建文件夾:mkdir(),mkdirs()

注意:僅僅根據後綴名並不能判斷是文件還是文件夾。

B:刪除功能

刪除文件或者文件夾:
delete()

注意:
A:刪除一個帶內容的目錄,必須先刪除內容,在刪除目錄。
B:java中的刪除不走回收站。

C:判斷功能
判斷file是否存在:exists()
判斷file是否是文件:isFile()
判斷file是否是文件夾:isDirectory()

D:重名名功能
把舊名稱改變爲新名稱:renameTo()
注意:路徑問題。
重命名涉及兩個File對象。
將File1重命名成File2
在同一目錄下:
file2文件已經存在,重命名失敗
file2文件不存在,重命名成功
在不同目錄下:
file2文件已經存在,重命名失敗
file2文件不存在,剪切成功

E:獲取功能
基本獲取
獲取絕對路徑:getAbsolutePath() 
獲取定義的路徑:getPath() 
獲取名稱:getName()
獲取大小:length()
獲取最後修改時間:lastModified()
高級獲取
獲取指定目錄下所有文件或者文件夾的名稱數組:list()
獲取指定目錄下所有文件或者文件夾的File數組:listFiles()
返回所有盤符:listRoots()
文件過濾器:
接口 FilenameFilter  重寫accept()方法 dir:文件所在的目錄    name:文件名稱
方式1,定義類實現FilenameFilter,list(這個類的實例對象)  
方式2,匿名內部類

注意:File對象可以作爲參數傳遞給流的構造函數。

三、遞歸

(1)在函數內調用函數本身,即方法定義中調用方法本身的現象。
(2)遞歸注意事項:
    A:要有出口,否則就是死遞歸。
    B:次數不能太多,否則內存溢出。

    特殊事項:構造方法不能遞歸定義。
(3)案例:(面試可能見到)
    A:遞歸求階乘
    B:遞歸求兔子問題(斐波那契數列)
    C:遞歸遍歷目錄(帶內容的目錄)
    D:遞歸刪除目錄(帶內容的目錄)

         (4)遞歸注意事項

            必須在函數內調用該函數本身。
    遞歸算法所在函數內,必須有函數出口。
    遞歸次數不能過多,否則會導致內存溢出。


------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

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