我理解创建对象和创建变量之间的区别。例如:
private int number;
MyClass myObj = new MyClass();
但我的观点是这两者之间的区别是什么?
private MusicPlayer player;
player = new MusicPlayer();
MusicPlayer
是一个班级,但我们到底在做什么呢?
答案 0 :(得分:4)
private MusicPlayer player;
在此创建MusicPlayer
类的引用变量(但不创建对象)而不初始化它。所以你不能使用这个变量,因为它只是没有指向任何地方(它是null)。
例如,使用Point
类:
Point originOne;
可以这样表示:
player = new MusicPlayer();
在这里,您分配了MusicPlayer
类型的对象,并将其存储在player
引用中,以便您可以使用它上的所有函数。
例如,使用Point
类,x
和y
坐标:
Point originOne = new Point(23, 94);
可以这样表示:
两行的组合相当于:
private MusicPlayer player = new MusicPlayer();
答案 1 :(得分:4)
private MusicPlayer player;
declares an instance variable名为player
但does not initialize it.
player = new MusicPlayer();
为已声明的字段指定值。
答案 2 :(得分:4)
private MusicPlayer player;
这是一个声明,这意味着要创建一个MusicPlayer的新引用变量,只是一个引用,并且不会创建任何实例。你不能使用它,因为它指向null。
player = new MusicPlayer();
MusicPlayer()
调用MusicPlayer构造函数,new
创建一个MusicPlayer实例,=
将此实例分配给引用player
。
答案 3 :(得分:3)
一个类是一种类型。 Java是一种强类型语言,因此大多数时候它需要知道它正在处理的事物的类型。
引用变量只保存对象的引用。因为Java是强类型的,所以它总是想知道变量所持有的引用的类型(即,因为类是一个类型,所以它想知道变量引用所指向的对象的类)。 p>
whatEver object1 = new whatEver();
接下来是......
private MusicPlayer player;
player = new MusicPlayer();
以上实现了类似的结果,但是分多步进行。第1行仅确定变量播放器将保持对MusicPlayer类型对象的引用。 Java总是希望在使用之前知道它们的类型。
第二行创建一个MusicPlayer类型的new()对象,并将其引用赋予变量player。赋值再次有效,因为对象的类型和引用变量的类型一致。
答案 4 :(得分:2)
private MusicPlayer player;
这会在内存中分配一个4字节的空间(或者更多,在64位计算机上),最终可能指向堆中的对象。该对象未创建,因此它不存在,因此player
变量指向null
值....但这需要4个字节。这基本上就像为你计划拥有的狗保留名称“Stinky”,但你还没有。
player = new MusicPlayer();
这个东西在堆中创建的空间与MusicPlayer
类型的对象所需的空间一样多。该空间等于dunnow的标头多少字节,以指示该对象的类以及为声明为实例变量的每个对象引用存储其声明的实例变量(意味着额外的4
- 或更多 - 字节所需的额外内存(如果为null),以及主要数据类型的附加字节。这基本上就像确保你有一只名为“Stinky”的狗一样。
答案 5 :(得分:0)
这个问题的答案在https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html 我将使用一个虚构的 Fish 类示例。 使用以下方法时,
Fish tuna;
该语句通知编译器您将使用name来引用内容类型为 type 的数据。对于原始变量,此声明还为变量保留适当的内存量。 如果你声明一个这样的变量,它的值将不确定,直到实际创建一个对象并将其赋值给它。
当你写下面的陈述时,
Fish tuna = new Fish();
new运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。 new运算符还调用对象构造函数。
new运算符返回对其创建的对象的引用。此引用通常分配给适当类型的变量。
因此,当你说,
Fish tuna = new Fish();
您正在创建一个Fish类型的变量,它可以容纳Fish类型的对象,并使用new运算符创建该类型的对象并返回对它的引用。