nom*_*nom 8 java constructor try-finally
例如:
/**
* Constructor
*/
public Test(InputStream in){
try{
this.inputStream = in;
} finally{
inputStream.close();
}
}
Run Code Online (Sandbox Code Playgroud)
在创建Test对象后,传递给教师的InputStream是否立即关闭?或者,当Test对象被销毁时它是否关闭?我不知道如何在C++中实现类似于析构函数的东西.
Jon*_*eet 11
它作为构造函数的一部分执行.在构造函数中执行的代码只是普通代码 - 那里没有奇怪的控制流.(我的意思是在调用超类构造函数之后,运行变量/实例初始化程序.)
Java中没有与C++析构函数相当的东西.你得到的最接近的是终结器,但不应该用作C++析构函数的等价物.(你几乎不应该写终结者.有些情况下他们不会被关闭,并且他们被称为非确定性.)
在你给出的情况下,你可能不希望你的类承担关闭输入流的责任 - 通常打开流的代码也负责关闭它.但是,如果您确实想对此负责,或者只是让调用者更容易,那么您可能希望公开一个close()只关闭流的方法.您可能也希望实现AutoCloseable,以便调用者可以在您的类中使用try-with-resources语句:
try (Test test = new Test(new FileInputStream("foo.txt")) {
// Do stuff with test
}
Run Code Online (Sandbox Code Playgroud)
这将test.close()在try块结束时自动调用.