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,也不要忽视他的作用.

 


          

你可能感兴趣的:(基础)