劉意-java基礎視頻(API-IO流)筆記(一)

異常:程序出現不正常的情況。

Throwable類是java語言中所有錯誤或異類的超類
Error是Throwable的子類,用於指定合理的應用程序不應該試圖捕獲的嚴重問題
RuntimeException:是那些可能在java虛擬機正常運
               行期間拋出的異常的超類


程序的異常:Throwable
         嚴重問題:Error 我們不處理,這種問題一般都是很嚴重的,比如說內存溢出
         問題:Exception
                  編譯期問題:不是RuntimeException的異常  必須進行處理的,因爲你不處理,編譯就不能通過
                  運行期問題:RuntimeException  這種問題我們也不處理,因爲是你的問
                                                                            題,而且這個問題出現肯定是我們的代
                                                                                碼不夠嚴謹,需要修正代碼的

ArithmeticException 當出現異常的運算條件時,拋出此異常

如果程序出現了問題,我們沒有做出任何處理,最終jvm會做出默認的處理
把異常的名稱,原因及出現的問題等信息輸出在控制檯。
同時會結束程序。


處理異常的方案:
        A、try...catch...finally
        B、throws   拋出
try...catch...finall的處理格式:

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

變形格式:

  try{
         可能出現問題的代碼;
     }catch(異常名 變量){
         針對問題的處理;
     }

注意:
            A:try裏面的代碼越少越好。
            B:catch裏面必須有內容,哪怕是給出一個簡單的提示

二個異常的處理:
         a:每一個寫一個try...catch
         b:  寫一個try,多個catch             

try{
      .....
    }catch(異常名 變量){
      .....
    }catch(異常名 變量){
      .....
    }
      ......

             注意事項:
                          1、能明確地儘量明確,不要用大的來處理
                          2、平級關係的異常誰前誰後無所謂,如果出現了子父關係,父必須在後面。
注意:
       一旦try裏面出了問題,就會在這裏把問題給拋出去,然後和catch裏
             面的問題進行匹配,一旦有匹配的,就執行catch裏面的處理,然後
                  結束了try...catch 繼續執行後邊的語句

       
JDK7出現了一個新的異常處理方案:         

try{
       ...
    }catch(異常名1 | 異常名2 | ... 變量){
       ...
    }


                  注意:這個方式雖然簡潔,但是也不夠好。
                          A:處理方式是一致的。(實際開發中,好多時候可能就是針對同類型的問題,給出同一個處理)
                          B:多個異常間必須是平級關係。

      用“|”隔開,那麼就可以處理多個異常

編譯時異常和運行時異常的區別
   Java中的異常被分爲兩大類:編譯時異常和運行時異常。所有的RuntimeException類及其子類的實例被稱爲運
                                                  行時異常,其他的異常就是編譯時異常
                          編譯期異常: java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
                          運行期異常:無需顯示處理,也可以和編譯時異常一樣處理

RunntimeException時期,是運行時期
Exception屬於編譯時期
處理Runtime及其子系列,其他全叫編譯期
編譯器指的是在編譯期間你可以處理,你如果不處理,你通過不了
        ParseException表示解析時出現意外錯誤


在try裏面發現問題,jvm會幫我們生成一個異常對象,然後把這個對象拋出,和catch裏面的類進行匹配
如果該對象是某個類型的,就會執行該catch裏面的處理信息

異常中要了解的幾個方法:
             A:getMessage():獲取異常信息,返回字符串。
             B:toString():獲取異常類名和異常信息,返回字符串。
             C:printStackTrace():獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。把信息輸出在控制檯
             D:printStackTrace(PrintStream s):通常用該方法將異常內容保存在日誌文件中,以便查閱。
public String getMessage() :異常的消息字符串
public String toString() :返回異常的簡單信息描述
          此對象的類的name(全路徑名)
          ": "(冒號和一個空格)
          調用此對象getLocalizedMessage()方法的結果(默認返回的是getMessage()的內容)

throws
有時候,我們是可以對異常進行處理的,但是又有些時候,我們根本就沒有權限去處理某個異常。
或者說,我處理不了。我就不處理。
爲了解決出錯問題,java針對這種情況,就提供了另一種處理方案:拋出

格式:   

 throws 異常類名

       注意:這個格式必須跟在方法的括號後面。
注意:
         儘量不要在main方法上拋出異常

    在方法聲明上拋出,是爲了告訴調用者,你注意了;我有問題

小結:
       編譯期異常拋出,將來調用者必須處理
       運行期異常拋出,將來調用可以不用處理

throws後面可以跟多個異常名


throw
在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。


throw:如果出現了異常情況,我們可以把該異常拋出,這個時候的拋出的應該是異常的對象。

throws和throw的區別
    throws
         用在方法聲明後面,跟的是異常類名
         可以跟多個異常類名,用逗號隔開
         表示拋出異常,由該方法的調用者來處理
         throws表示出現異常的一種可能性,並不一定會發生這些異常
    throw
          用在方法體內,跟的是異常對象名
          只能拋出一個異常對象名
          表示拋出異常,由方法體內的語句處理
          throw則是拋出了異常,執行throw則一定拋出了某種異常 

我們到底該如何處理異常呢
原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由調用者處理,這是用throws
       區別:
           後續程序需要繼續運行就try
           後續程序不需要繼續運行就throws
       舉例:
            感冒了就自己喫點藥就好了,try
            吃了好幾天藥都沒好結果得了H7N9,那就的得throws到醫院
            如果醫院沒有特效藥就變成Error了


1、finally:被finally控制的語句體一定會執行
注意:如果在執行到finally之前jvm退出了,就不能執行了(比如:System.exit(0))。
      A:格式
                 try...catch....finally...
       B:用於釋放資源,在IO流操作和數據庫操作中會見到


2、final,finally和finalize的區別
            final:最終的意思,可以修飾類,成員變量,成員方法
                         修飾類:類不能被繼承
                         修飾變量:變量是常量
                         修飾方法:方法不能被重寫
         finally:是異常處理的一部分,用於釋放資源
            一般來說,代碼肯定會執行,特殊情況:在執行到finally之前jvm退出了
        finalize:是Object類的一個方法,用於垃圾回收

finalize():  當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法


如果catch裏面有return語句,請問finally裏面的代碼還會執行嗎?
如果會,請問是在return之前,還是return後。
會,前

準確的說,應該在中間

3、try...catch...finally的格式變形
            A:try...catch...finally
            B:try...catch
            C:try...catch..catch...
            D:try...catch..catch...finally
            E:try...finally
                    這種做法的目前是爲了釋放資源。

自定義異常:
      繼承自Exception------(編譯期的異常)
      繼承自RuntimeException----------(運行時期的異常)
     
自定義一般什麼也不用寫,就給個繼承就可以了,有的給個構造方法

java不可能對所有的情況都考慮到,所以,在實際的開發中,我們可能需要自己定義異常。
而我們自己隨意的寫一個類,是不能作爲異常類來看的,要想你的類是一個異常類,就必須繼承自Exception或者RuntimeException

兩種方式:
   A:繼承Exception
   B:繼承RuntimeException

異常注意事項:
           A:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。
                   (父親壞了,兒子不能比父親更壞)
           B:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的
                  子集,子類不能拋出父類沒有的異常
           C:如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果
                  子類方法內有異常發生,那麼子類只能try,不能throws

@Override表示重寫


java.io流包下
File類,文件和目錄(文件夾)路徑名的抽象表示形式

我們要想實現IO的操作,就必須知道硬盤上文件的表現形式
而java就提供了一個類File供我們使用。
構造方法:
         File(String pathname):根據一個路徑得到File對象
         File(String parent, String child):根據一個目錄和一個子文件/目錄 得到File對象
         File(String parent, String child):根據一個父FIle對象和一個子文件 / 目錄得到File對象

創建功能:
        public boolean createNewFile()  :創建文件  如果存在這樣的文件夾,就不創建了
        public boolean mkdir()  :創建文件夾  如果存在這樣的文件夾,就不創建了
        public boolean mkdirs()  :創建文件夾,如果父文件夾不存在,會幫你創建出來
 注意:要想在某個目錄下創建內容,該目錄首先必須存在
           你到底要創建文件還是文件夾,你最清除,方法不要調錯了
           如果你創建文件或者文件夾忘了寫盤符路徑,那麼,默認在項目路徑下。

 刪除功能:
        public boolean delete() :刪除文件,文件夾
   注意: java中的刪除不走回收站
           要刪除一個文件夾,請注意該文件夾內不能包含文件或者文件夾

重命名功能:
        public boolean renameTo(File dest)
 路徑以盤符開始:絕對路徑
 路徑不以盤符開始: 相對路徑

  注意:  如果路徑名相同,就是改名。
            如果路徑名不同,就是改名並剪切。

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

基本獲取功能:
          public String getAbsolutePath()  :獲取絕對路徑
          public String getPath()  :獲取相對路徑
          public String getName()  :獲取名稱
          public long length()  :獲取長度。字節數
          public long lastModified()  :獲取最後一次的修改時間,毫秒值(可查看有沒有人動我東西)

高級獲取功能:
          public String[] list() :獲取指定目錄下的所有文件或者文件名的名稱數組
          public File[] listFiles()  :獲取指定目錄下的所有文件或者文件夾的File數組

public String[]  list[]  返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄

需求:把某路徑下的視頻名稱修改爲 00?_介紹.avi
思路:
 A:封裝目錄   

File srcFolder =new File();

B:獲取該目錄下所有的文件的File數組

File[] fileArray = srcFolder.listFiles();

C:遍歷該File數組,得到每一個FIle對象

for(File file : fileArray){
     String name = file.getName();
     int index = name.indexOf();
     String numberString = name.substring(index+x,index+x);    
     int endIndex = name.lastIndexOf();
     String nameString = name.substring(endIndex);
     String newName = numberString.concat(nameString);
     File newFile = new File(srcFolder,newName);    
    }

D:拼接一個新的名稱,然後重命名即可 

file.renameTo(newFile);

 

 

參考網站:

https://www.bilibili.com/video/av37614313?p=532

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