例如:
/**
* Constructor
*/
public Test(InputStream in){
try{
this.inputStream = in;
} finally{
inputStream.close();
}
}
在创建Test对象后是否立即关闭传递给指导者的InputStream?还是在 Test 对象被销毁时关闭?我不知道如何在 C++ 中实现类似于析构函数的东西。
最佳答案
它作为构造函数的一部分执行。在构造函数中执行的代码只是普通代码——那里没有奇怪的控制流。 (我的意思是在调用父类(super class)构造函数并运行变量/实例初始化器之后。)
在 Java 中没有与 C++ 析构函数等效的东西。最接近的是 finalizer ,但它不应该用作 C++ 析构函数的等价物。 (您几乎不应该编写终结器。在某些情况下,它们不会在关闭时被调用,并且它们被非确定性地调用。)
在您给出的情况下,您可能不希望您的类承担关闭输入流的责任——通常打开流的代码也负责关闭它。但是,如果您确实想对此负责,或者只是让调用者更容易,您可能想要公开一个 close()
方法来关闭流.你可能想要实现 AutoCloseable
也,以便调用者可以使用 try-with-resources statement与你的类(class):
try (Test test = new Test(new FileInputStream("foo.txt")) {
// Do stuff with test
}
这将在 try
block 的末尾自动调用 test.close()
。
关于java - 在 Java 中,什么时候执行构造函数中的最后一个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700350/