习惯在try{}catch(){}后面加上finally{}来确保一些close()之类的函数必备执行。
比如
Socket socket = null;
try{
   socket = new Socket(InetAddress.getLocalHost(), 4321);
   //......
}catch(Exception e){
   //......
}finally{
   try {
     if(socket!=null)socket.close();
   } catch (IOException e) {
     e.printStackTrace();
   }
}但是如果代码在一个函数中,该如何写才能保证函数会抛出异常,而且close()会保证被执行呢?
比如     public static String ftoStr(FileInputStream fin) throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
//若干操作
                reader.close();        //原本想放在finally中的代码
fin.close();
return strb.toString();
}请问该则么写呢?

解决方案 »

  1.   

    如果 这段代码产生异常那么就不会执行下面的关闭动作了,就会把异常抛出在调用此方法的地方,在那个地方就可以用try{}catch(){}finally{}捕捉异常,然后就在finally语句块里面执行关闭动作。
      

  2.   

    异常还是要扑捉的。。
    还是要用try catch的。。
      

  3.   

    在调用的地方捕捉然后~finally{}
      

  4.   


        public static String ftoStr(FileInputStream fin) throws Exception{
    BufferedReader reader;
    try{
             reader = new BufferedReader(new InputStreamReader(fin));
            //若干操作
    }catch (Exception e) {
    throw e;
    }finally{
                    reader.close();        //原本想放在finally中的代码
    }
            //fin.close();
            return strb.toString();
        }
    fin.close();由ftoStr方法的调用者管理。
      

  5.   

    这种方法是对的,除了return不能放在finally后面,结贴了。