我最近看到了一个代码......
try ( Socket socket = new Socket("localhost", 2003);
Writer writer = new OutputStreamWriter(socket.getOutputStream());){
writer.write("data");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
在此代码中try catch
用作try
(somecode
){again some code
} catch(){}
;它工作正常;
然后我用这种方式尝试了这段代码
try {
Socket socket = new Socket("localhost", 2003);
Writer writer = new OutputStreamWriter(socket.getOutputStream());
writer.write("data");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
这里try catch
用作try
{again some code
} catch(){}
;这也工作......我已经熟悉这种模式......
所以我的问题是......
这两种方式实施try catch
有什么区别???
第一个解决方案是“try-with-resources”的示例,您可以在try
块中声明可访问的资源。如果您使用AutoClosable
实例,这总是可行的。在finally
中的最后一行终止后,Java将在隐式try
块中为您关闭这些资源。这非常有用,因为您不需要自己释放这些资源。
第二个例子不关闭套接字和编写器,因此在功能上不等于解决方案1。
Java 1.7引入了try资源的功能,您无需显式关闭在try块中打开的资源
在1.7之前,你总是要记得关闭finally块中的资源。
如果您在try()块中打开的所有资源都实现了autocloseable接口qazxsw poi
第二个需要https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html来关闭finally {}
。第一个将自动关闭。第一个需要jdk1.7或更高版本。