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
保持未赋值。