Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非实例对象在Java中是否无用?_Java - Fatal编程技术网

非实例对象在Java中是否无用?

非实例对象在Java中是否无用?,java,Java,我真的不知道如何精确地回答我的问题,但我的意思是: Car porsche = new Car(); // im creating instance of the class and i can use it to call methods etc. Car audi; // is that piece of code useful or useless? what can i do with only this 我不能改变像C++或调用方法那样的属性,所以我能做什么? < P>这取决于上下

我真的不知道如何精确地回答我的问题,但我的意思是:

Car porsche = new Car(); // im creating instance of the class and i can use it to call methods etc.

Car audi; // is that piece of code useful or useless? what can i do with only this

<>我不能改变像C++或调用方法那样的属性,所以我能做什么?

< P>这取决于上下文。但有时它会很有用

这两行都声明了一个变量,第一行直接分配给对象的实例。第二个被分配给
null

我现在看到一个用例,但当然还有更多。 例如,您希望在另一个范围内实例化对象:

保时捷汽车;
试一试{
porsche=loadMyCarFromTheGarage();//这可能引发异常
}捕获(车库清空例外e){
//处理错误、退出、恢复等
}
porsche.drive();
... // 继续在try/catch范围外使用您的汽车
这一行

Car porsche = new Car(); 
做一些事情
new Car()
创建汽车的新实例,并返回对该汽车的引用
Car-porsche
声明一个类型的变量,该变量可以保存对某辆汽车的引用。等号
=
用引用(由“new”表达式生成)初始化变量(可以保存引用)

相比之下

Car audi;
声明一个变量,该变量可以保存对汽车的引用。该变量当前未初始化(如果我们假定它是局部变量)

显式初始化它,以表示根本没有车

至于它是否有用。变量的一个主要功能是改变值。对于Car变量,我们可能希望它可能包含不同的Car引用

Car audi;
if (budget > 160000)
    audi = new Car(AUDI_RS_CONVERTIBLE, NEW);
else {
    haggle_over_used_car_price();
    audi = new Car(AUDI_A3, USED); 
}

在Java中,理解对象和对象引用之间的区别非常重要。变量保存对对象的引用;变量不是对象。

Car audi声明一个变量。稍后,您可以使用该变量存储不同的对象,并在源代码中通过名称
audi
引用它们。它不是无用的,也不是对象。两行创建变量,一行引用对象,另一行保存空引用。是的,后者很有用,因为您可以在需要时为其指定一个可行的对象。此外,查看“依赖项注入”以了解如何将引用几乎“神奇地”分配给它。如果您需要在一个位置声明它并在另一个位置创建它,则后者非常有用。@Powerlord为什么不在一个位置执行它?@user13630431有时您不能。例如,如果这是一个类级变量,您希望您的类的用户通过构造函数传入它,但我仍然可以在if语句中内联执行它,如:Car audi=new Car(audi_RS_convertive,new);else车奥迪=新车(奥迪A3,二手车);正如您在评论中所写,该代码不是合法的Java。如果您将“Car audi=new…”语句封装在{…}中,将其分为多个块,那么这将是合法的:但每个Car声明在其块外都无法访问,因此没有用处。
Car audi;
if (budget > 160000)
    audi = new Car(AUDI_RS_CONVERTIBLE, NEW);
else {
    haggle_over_used_car_price();
    audi = new Car(AUDI_A3, USED); 
}