public static void main(String args[]) throws IOException {
String receivedMessage;
try (ServerSocket serverSocket = new ServerSocket(777)) {
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected");
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
while ((receivedMessage = in.readLine()) != null) {
System.out.println(receivedMessage);
}
System.out.println("Client disconnected");
}
}
}
}
是的,你的例子是正确的。
try-with-resourcestry
块可以独立存在,因为它有一个隐式finally
块;而传统的try
块后面必须跟着catch
块和/或finally
块。
因此,您的示例代码等效于以下内容(除了资源变量在各自的try块范围之外是可见的之外):
final ServerSocket serverSocket = new ServerSocket(777);
try {
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected");
final BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
try {
while ((receivedMessage = in.readLine()) != null) {
System.out.println(receivedMessage);
}
System.out.println("Client disconnected");
} finally {
in.close();
}
}
} finally {
serverSocket.close();
}
try (Reader stream = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(stream)) {
// do stuff, still preferring to use 'in' here rather than 'stream'
}
我已经使用try with资源重写了一个Play2/JDBC查询,但我不确定这是否正确。第一个try块处理Connection和准备语句。第二次尝试处理ResultSet。 理论上连接,语句和结果集在任何情况下都会被正确关闭?是这样吗?还是我错过了需要处理的东西? -- 向捕获块添加了日志记录。
本文向大家介绍什么是Java中的try-with-resource?,包括了什么是Java中的try-with-resource?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 从JSE7开始,引入了try-with-resources语句。在这种情况下,我们在try块中声明一个或多个资源,这些资源在使用后将自动关闭。(在
本文向大家介绍Java try-with-resource语法使用解析,包括了Java try-with-resource语法使用解析的使用技巧和注意事项,需要的朋友参考一下 背景 众所周知,所有被打开的系统资源,比如流、文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故。 在Java的江湖中,存在着一种名为finally的功夫,它可以保证
假设我使用的是一个文档不完整的第三方库,它没有源代码。库的方法之一接受来加载各种数据。 不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么。有没有人碰巧知道?
下面是: 下面是 为了简单起见,我使用了H2数据库,因为它是一个基于文件的数据库,很容易创建和测试。