http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
这种设计模式在 Java 中可行吗?如果是这样,怎么做?如果不是,为什么不呢?
谢谢!
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
这种设计模式在 Java 中可行吗?如果是这样,怎么做?如果不是,为什么不呢?
谢谢!
您链接到的同一个维基百科页面有一个关于 Java 的部分,引用:
因此,未引用对象的“finalize”方法可能永远不会被调用或仅在对象变得未引用后很久才调用。因此,资源必须由程序员手动关闭,使用类似dispose 模式的东西。
void java_example() {
// open file (acquire resource)
final LogFile logfile = new LogFile("logfile.txt");
try {
logfile.write("hello logfile!");
// continue using logfile ...
// throw exceptions or return without worrying about closing the log;
// it is closed automatically when exiting this block
} finally {
// explicitly release the resource
logfile.close();
}
}
每次使用资源时,释放资源的负担都落在程序员身上。
我认为 Java 7 有一个提案,它将创建 Closeable 类,并为try
块提供一些语法糖以使其更简洁(但您仍然必须编写该try
块)。
对于同一范围内的多个资源收购,您将需要本文中经过精心设计的稳健方法:
http://www.javalobby.org/java/forums/t19048.html
总结如下。
final Connection conn = ...;
try {
final Statement stmt = ...;
try {
final ResultSet rset = ...;
try {
//use resources.
}
finally {rset.close();}
}
finally {stmt.close();}
}
finally {conn.close();}
请阅读原始链接以了解为什么它需要这样,以及为什么其他答案中提出的其他任何内容都不够。