java try()自动释放_try(代码){},Java 7 新的 try-with-resources 语句,自动资源释放

从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。

新的语句支持包括流以及任何可关闭的资源,例如,一般我们会编写如下代码来释放资源:

private static void customBufferStreamCopy(File source, File target) {

InputStream fis = null;

OutputStream fos = null;

try {

fis = new FileInputStream(source);

fos = new FileOutputStream(target);

byte[] buf = new byte[8192];

int i;

while ((i = fis.read(buf)) != -1) {

fos.write(buf, 0, i);

}

}

catch (Exception e) {

e.printStackTrace();

} finally {

close(fis);

close(fos);

}

}

private static void close(Closeable closable) {

if (closable != null) {

try {

closable.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

代码挺复杂的,异常的管理很麻烦。

而使用 try-with-resources 语句来简化代码如下:

private static void customBufferStreamCopy(File source, File target) {

try (InputStream fis = new FileInputStream(source);

OutputStream fos = new FileOutputStream(target)){

byte[] buf = new byte[8192];

int i;

while ((i = fis.read(buf)) != -1) {

fos.write(buf, 0, i);

}

}

catch (Exception e) {

e.printStackTrace();

}

}

代码清晰很多吧?在这个例子中,数据流会在 try 执行完毕后自动被关闭,前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。

我也是在使用neo4j-jdbc-driver时发现的这种写法

// Connecting

try (Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", 'neo4j', password)) {

// Querying

String query = "MATCH (u:User)-[:FRIEND]-(f:User) WHERE u.name = {1} RETURN f.name, f.age";

try (PreparedStatement stmt = con.prepareStatement(query)) {

stmt.setString(1,"John");

try (ResultSet rs = stmt.executeQuery()) {

while (rs.next()) {

System.out.println("Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));

}

}

}

}

Please note that the example above uses the try-with-resource blocks that automatically closes resources when the try block is exited.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值