try-with-resources 是 java 7 引入的语法糖,用于 自动 管理资源(如文件流、数据库连接等),确保资源在使用后被正确关闭,避免资源泄漏。
语法糖 是什么?语法糖 (syntactic sugar)是计算机语言中对语法进行的一些改动,使得代码更易于人类阅读和编写,但并不改变语言的功能或表达能力。本质上,编译器 / 解释器会在背后把这些 "甜语法" 转换成语言原本的基础语法来执行。
回到我们的 try-with-resources。
基本语法:
try (resourcetype resource = new resourcetype()) {
// 使用资源的代码
} catch (exception e) {
// 异常处理
}
资源类 必须实现 autocloseable 或 closeable 接口:
public interface autocloseable {
void close() throws exception;
}
public interface closeable extends autocloseable {
void close() throws ioexception;
}
传统 finally 方式(繁琐易出错):
bufferedreader br = null;
try {
br = new bufferedreader(new filereader("test.txt"));
// 业务代码
} catch (ioexception e) {
e.printstacktrace();
} finally {
// 必须判空 + 嵌套try-catch(close()也会抛异常)
if (br != null) {
try {
br.close();
} catch (ioexception e) {
e.printstacktrace();
}
}
}
try-with-resources 方式(简洁健壮):
try (bufferedreader br = new bufferedreader(new filereader("test.txt"))) {
// 业务代码
} catch (exception e) {
e.printstacktrace();
}
单个资源:
try (bufferedreader br = new bufferedreader(new filereader("test.txt"))) {
string line;
while ((line = br.readline()) != null) {
system.out.println(line);
}
} catch (ioexception e) {
e.printstacktrace();
}
多个资源(支持在括号内声明多个资源,用;分隔):
try (inputstream in = new fileinputstream("input.txt");
outputstream out = new fileoutputstream("output.txt")) {
byte[] buffer = new byte[1024];
int bytesread;
while ((bytesread = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesread);
}
} catch (ioexception e) {
e.printstacktrace();
}
资源顺序(多个资源按声明顺序关闭 - 后声明的先关闭):
// 声明顺序:connection → preparedstatement → resultset
try (connection conn = drivermanager.getconnection(url, user, pwd);
preparedstatement ps = conn.preparestatement("select * from user");
resultset rs = ps.executequery()) {
// 业务逻辑
}
// 关闭顺序:resultset → preparedstatement → connection
try-with-resources 是 java 开发中资源管理的首选方式,大大减少了资源泄漏的风险,提高了代码的可读性和可维护性。
到此这篇关于java中try-with-resources的使用详解的文章就介绍到这了,更多相关java try-with-resources内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论