习惯在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();
}请问该则么写呢?
比如
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();
}请问该则么写呢?
还是要用try catch的。。
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方法的调用者管理。