这段代码如何编译和运行?

时间:2017-05-30 16:58:02

标签: java object constructor

class test {

    public static void main(String[] args) throws java.lang.Exception {
        new Animal();
    }
}

class Animal {

    Animal() {
        System.out.println("sound! sound!");
    }
}

这段代码的编译方式很好,因为我们知道如果不使用类的引用变量,我们就不能单独使用new运算符了,这里我只提及" new Animal();"并且构造函数正在执行没有任何错误,怎么??

4 个答案:

答案 0 :(得分:3)

你说:

  

我们知道,如果不使用引用变量,我们就无法使用   单独的新运营商

你可以。生成的对象引用根本不会分配给任何内容,并且无法进一步访问分配/实例化的对象。请注意,如果没有保持引用,您实例化的Animal对象将成为即时垃圾收集的候选对象(尽管main()将在您的示例中立即退出)

答案 1 :(得分:1)

你可以根据需要做new Animal();,唯一的办法就是创建对象但没有参考,以后你可以用它来处理对象......

所以这个:

public static void main(String[] args)  {
    new Animal();
}

很好,它编译并运行没有问题

这里只是一个来自JDK的例子:

来自DateFormat

public final String format(Date date)
{
    return format(date, new StringBuffer(),
                  DontCareFieldPosition.INSTANCE).toString();
}

匿名创建StringBuffer对象并传递给格式方法...

答案 2 :(得分:0)

仅仅因为您没有将new Animal()分配给变量,这并不意味着它不会被初始化。

您无法使用它或再次参考它。

答案 3 :(得分:0)

您正在创建一个匿名对象。执行构造函数后; GC将清理此对象。

https://www.quora.com/What-is-anonymous-object-instantiation