我有一个班级
public class TestDog {
public static void main(String[] args) {
Dog d1 = new Dog();
Dog d2 = new Dog();
Dog d3 = d2;
//how many objects created ? at this line.
}
}
和测试类:
public class Dog {
public Dog() {
try{
throw new Exception() ;
} catch( Exception e) {}
}
}
我怀疑在整个过程中创建了多少个对象?请澄清。
答案 0 :(得分:0)
你是对的,只创建了2个对象。分配对另一个引用的引用不会创建新对象。此外,还有一些额外的观点:
Exception
对象,但它是一个本地对象,并且不会传播回调用者,因此它有资格进行垃圾回收(或者可能已经被垃圾收集了在构造函数完成后立即分配时间d2
,具体取决于垃圾收集器运行的时间。Exception
对象分配给Dog
类中的任何引用,则为是,将再创建2个Exception
个对象(并且还活着)。答案 1 :(得分:0)
从你的代码中我们看到我们抛出Exception
,但抓住它并处理 - 在catch
之后不做任何阻止。
我们将创建2个Dog对象 - new
。