Java 以这两种方式创建对象有什么区别

Java 以这两种方式创建对象有什么区别,java,Java,创建像这样的对象有什么区别 OverFlow a = new OverFlow(); OverFlow a; 在第二种情况下,不创建对象。a变量保持未初始化状态。在第二种情况下,不创建对象。a变量保持未初始化状态 new OverFlow(); 确实创建了类溢出的实例,而 OverFlow a; 这只是一个声明 确实创建了类溢出的实例,而 OverFlow a; 只是一个声明。在第一个声明中,“a”的值是新构造的溢出对象的值 在第二个中,它是空的。在第一个中,“a”的值是新构造的溢出对

创建像这样的对象有什么区别

OverFlow a = new OverFlow();

OverFlow a;

在第二种情况下,不创建对象。
a
变量保持未初始化状态。

在第二种情况下,不创建对象。
a
变量保持未初始化状态

new OverFlow();
确实创建了类溢出的实例,而

OverFlow a;
这只是一个声明

确实创建了类溢出的实例,而

OverFlow a;
只是一个声明。

在第一个声明中,“a”的值是新构造的溢出对象的值

在第二个中,它是空的。

在第一个中,“a”的值是新构造的溢出对象的值


在第二个实例中,它是空的。

当您创建一个对象而不将其定义为新对象时,它将不会被初始化(构造函数也不会被调用)。您应该只使用第二个版本在try-catch块中创建对象。

当您创建一个对象而不将其定义为新对象时,它将不会被初始化(构造函数也不会被调用)。您应该只使用第二个版本在try-catch块中创建对象。

OverFlow a
位在这两种情况下的含义相同:它创建一个名为
a
的变量,该变量存储对类
溢出
(或子类)实例的引用

在第一种情况下,将创建一个新对象,并初始化引用以指向该对象

在第二种情况下,引用未初始化,并保持为空

OverFlow a
位在这两种情况下的含义相同:它创建一个名为
a
的变量,该变量存储对类
溢出
(或子类)实例的引用

在第一种情况下,将创建一个新对象,并初始化引用以指向该对象


在第二种情况下,引用未初始化,并保持
null

溢出不创建对象(即您可以使用的实例)。它仅定义类型为
溢出的变量
a
,但它将被分配到
null
。如果您尝试使用它,您将因此得到一个NullPointerException。根据编译器的不同,它很可能会给您一个“未初始化”变量警告


溢出a=新溢出()
做同样的事情,只是它使一个实际对象(非空)准备好使用。

溢出不创建对象(即您可以使用的实例)。它仅定义类型为
溢出的变量
a
,但它将被分配到
null
。如果您尝试使用它,您将因此得到一个NullPointerException。根据编译器的不同,它很可能会给您一个“未初始化”变量警告

溢出a=新溢出()
做同样的事情,只是它生成了一个实际的对象(非空),可以随时使用。

基本上

OverFlow a;
告诉编译器,“最终会有一个溢出类型的变量,所以要做好准备。”

实际分配存储变量所需的内存并调用该变量的构造函数

OverFlow a;
OverFlow a;
告诉编译器,“最终会有一个溢出类型的变量,所以要做好准备。”

实际分配存储变量所需的内存并为其调用构造函数

OverFlow a;
相等于

OverFlow a = null;
相等于

OverFlow a = null;

不要太迂腐,但如果它是一个类字段,则只有
null
;在一个方法中,编译器会对你吐出它还没有初始化。@BrianRoach:那肯定是错误的吗?我刚刚测试并
objectobj编译很好。您会得到类似的结果:
App.java:[26,6]变量foo可能未初始化1错误
您没有尝试使用它。在这种情况下,编译器会忽略该变量,因此是双学究式的-如果在方法中这样做,不要显式地将其设置为
null
,然后尝试使用该变量,它将不会编译;在一个方法中,编译器会对你吐出它还没有初始化。@BrianRoach:那肯定是错误的吗?我刚刚测试并
objectobj编译很好。您会得到类似的结果:
App.java:[26,6]变量foo可能未初始化1错误
您没有尝试使用它。在这种情况下,编译器会忽略该变量,因此这是一种迂腐的做法-如果您在方法中这样做,不要显式地将其设置为
null
,然后尝试使用该变量,它将不会编译。尽管您似乎得到了很多答案,但我建议您阅读以下内容:同意。我的研究工作没有被否决票。一本关于Java、Oracle教程的优秀入门书,或者只是简单地尝试一下,都可以解释两者的区别。这是一个合法的入门问题,不应该被否决。@SteveKuo-SO的目的不是取代一本关于编程的入门书。这个问题没有显示出任何研究成果,这是进行向下投票(将鼠标悬停在向下箭头上)的首要原因。尽管你似乎得到了很多答案,但我建议你阅读以下内容:同意。我的研究工作没有被否决票。一本关于Java、Oracle教程的优秀入门书,或者只是简单地尝试一下,都可以解释两者的区别。这是一个合法的入门问题,不应该被否决。@SteveKuo-SO的目的不是取代一本关于编程的入门书。这个问题没有显示任何研究成果,这是只对字段(类变量)进行向下投票(将鼠标悬停在向下箭头上)的首要原因。对于局部变量
溢出a
保持未赋值。仅适用于字段(类变量)。对于局部变量
溢出a
保持未赋值。