假设我有一个类包含对正在读取文件的 InputStream 或正在写入文件的 OutputStream 的引用(或者另一个示例,如果您是 Android 开发人员,则为 MediaPlayer 实例)。
知道 Java 是按值传递对象的,当你有类似下面的伪代码时会发生什么?
class MyClass {
InputStream is;
public void read() {
// initialize inputstream here (assume it's reading from a file that contains the alphabet from A-z)
is.read();
}
public MyClass() {
this.read();
}
}
class OtherClass {
MyClass mine = new MyClass();
public OtherClass() {
mine.read();
LastClass lastClass = new LastClass(mine);
}
}
class LastClass {
MyClass his;
public LastClass(MyClass mc) {
his = mc;
his.read();
}
}
我的问题是,既然我们按值传递对象,它们如何能够维护对开放资源的引用?另外,为了清楚起见,在执行所有操作时,存在多少 MyClass 实例?