创建像这样的对象有什么区别
OverFlow a = new OverFlow();
OverFlow a;
在第二种情况下,不创建任何对象。a
变量保持未初始化。
这
OverFlow a
bit 在这两种情况下具有相同的含义:它创建一个名为的变量,该变量存储对类(或子类)a
实例的引用。OverFlow
在第一种情况下,创建了一个新对象,并将引用初始化为指向该对象。
在第二种情况下,引用未初始化并保持不变null
。
OverFlow a;
等于
OverFlow a = null;
new OverFlow();
确实创建了一个 OverFlow 类的实例,而
OverFlow a;
只是一个声明。
在第一个中,“a”具有新构造的溢出对象的值。
在第二个中,它是空的。
当您创建一个对象而不将其定义为新对象时,它将不会被初始化(也不会调用构造函数。)。您应该只使用第二个版本在 try-catch-block 中创建对象。
OverFlow a;
不创建对象(即您可以使用的实例)。它只定义a
具有类型的变量,OverFlow
但它将被分配给null
. 如果您尝试使用它,您将因此得到 NullPointerException。根据您的编译器,它也很可能会给您一个“未初始化”变量警告。
OverFlow a = new OverFlow();
做同样的事情,除了它创建一个可以使用的实际对象(非空)。
基本上,
OverFlow a;
告诉编译器,“最终会有一个类型溢出的变量,所以要做好准备。”
OverFlow a = new Overflow();
实际上分配了存储变量所需的内存并为其调用构造函数