Java中“新”运算符的真正含义是什么?

时间:2017-01-10 13:10:32

标签: java

如果'构造函数'在我们创建对象时分配内存并初始化实例变量,那么我们为什么要说Object o = new Object();? 为什么不只是Object o = Object();

新操作员实际上做了什么?

2 个答案:

答案 0 :(得分:5)

构造函数仅初始化预先存在的对象。告诉构造函数和方法调用之间区别的方法是new关键字。例如您可以在类Object中使用名为Object的方法,但这可能不会创建任何内容。当你有子类时,这更令人困惑。

class A {
    A() { } // constructor
    static A A() { return new A(); } // method
    static A B() { return new A(); } // method
}

class B extends A {
    B() { }
}

A b = new B(); // creates a B
A a = B.B(); // creates an A

new关键字的要点是在创建新对象时明确。

顺便说一下你可以有一个工厂方法,按照你的建议返回一个新对象,但是要明确它可能会被认为更清楚它实际上在做什么。

答案 1 :(得分:-1)

这样可以避免名称冲突。

假设您有一个带有方法C,D和E的A类,但您还有另一个名为D的类,您想在A中创建一个实例。

如果没有像new那样的东西,那么如果你想调用方法或者创建一个新对象,那么编译器就没有想法。