抛出新异常时创建的对象()

时间:2017-09-18 07:42:24

标签: java object exception

我有一个班级

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) {}
    }
}

我怀疑在整个过程中创建了多少个对象?请澄清。

2 个答案:

答案 0 :(得分:0)

你是对的,只创建了2个对象。分配对另一个引用的引用不会创建新对象。此外,还有一些额外的观点:

  • 虽然在构造函数中创建了一个新的Exception对象,但它是一个本地对象,并且不会传播回调用者,因此它有资格进行垃圾回收(或者可能已经被垃圾收集了在构造函数完成后立即分配时间d2,具体取决于垃圾收集器运行的时间。
  • 如果将Exception对象分配给Dog类中的任何引用,则为是,将再创建2个Exception个对象(并且还活着)。

答案 1 :(得分:0)

从你的代码中我们看到我们抛出Exception,但抓住它并处理 - 在catch之后不做任何阻止。

我们将创建2个Dog对象 - new