gpt4 book ai didi

java - 在 Java 中,什么时候执行构造函数中的最后一个 block ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:40 25 4
gpt4 key购买 nike

例如:

/**
* 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com