try...catch...finally對IO流異常進行處理

           在IO流等流中如果使用了一個流那麼要在使用完畢後釋放掉它,不然它會繼續佔用內存空間,但是如果在使用中出現了異常,而我們只是將異常向上拋出,而不是自定義異常去解決,那麼只有等到在Throwable裏將程序停止,並且打印出異常後,程序纔算終止,爲了避免這種情況的發生,java爲我們提供了finally的用法,

          finally再java中的定義是有一些特定的代碼無論異常是否發生,都需要執行。另外,因爲異常會引發程序跳轉,導致有些語句執行不到。而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執行的.

          那麼也就是說無論異常是否拋出,程序是否要關閉,方法是否要停止,finally中的語句是肯定要執行一次的.這就是他的優點,同事也就說明了他的缺點:儘量不要在finally中寫入return.一旦寫入return,程序在出現異常的時候一樣會有返回值返回到調用方法中.這樣很有可能在內存中即使保留了這個數據,這個數據也沒有實際意義.

         舉個IO流的例子給大家說明一下.

         使用代碼實現

寫一個實現把字符串中數據,寫入項目根目錄下的content.txt文件中.

        

/*

1.定義類(Test1)

2.寫一個靜態方法 void write(String content),在方法中

         定義字符緩衝輸出流變量BufferedWriterbw;

         寫一個try{   }catch(IOException e){  }finally{ }代碼塊

         在try{ }在代碼塊中

         創建BufferedWriter對象,綁定content.txt文件,賦值給bw

         調用bw的write()方法,傳入content

         在catch代碼塊中,打印異常信息

         在finally代碼塊關閉流

         寫try{}catch(IOExceptionex){} 代碼塊

         在try 代碼塊中,如果bw!=null,調用bw.close()方法

         在catch代碼塊,打印異常信息

3.在main方法中調用write(String conent)方法

 */

public class Test1 {

    

//  寫一個靜態方法 void write(Stringcontent)

     public static void write(String content){

//       定義字符緩衝輸出流變量BufferedWriterbw,初始值爲null;

         BufferedWriter bw = null;

//       寫一個try{   }catch(IOException e){  }finally{ }代碼塊

         try{

//       在try{ }在代碼塊中

//       創建BufferedWriter對象,綁定content.txt文件,賦值給bw

              bw = new BufferedWriter(new FileWriter("content.txt"));

//            調用bw的write()方法,傳入content

              bw.write(content);

         }catch(IOException e){

//       在catch代碼塊中,打印異常信息

              e.printStackTrace();

         }finally{

//       在finally代碼塊關閉流

        

//       寫try{}catch(IOExceptionex){} 代碼塊

              try{

//       在try 代碼塊中,如果bw!=null,調用bw.close()方法

                   if(bw != null){

                       bw.close();

                   }

              }catch(IOException ex){

//       在catch代碼塊,打印異常信息

                   ex.printStackTrace();

              }

         }

     }

    

     public static void main(String[] args) {

         write("HelloWorld");

     }

}

========================================================

在實際開發中,finally的用法大多數是關閉流的,所以及時在其他自定義異常中砍不到finally,也不要忽視他的作用.

 


          

發佈了56 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章