Java 什么&x2018;初始化对象数组和初始化对象之间的区别是什么?
例如:Java 什么&x2018;初始化对象数组和初始化对象之间的区别是什么?,java,arrays,initialization,Java,Arrays,Initialization,例如: Student[]stu=新生[10] 学生stu=新学生() 他们之间有什么区别 初始化对象数组时发生了什么?为什么它不调用构造函数?初始化数组时,所有元素最初都为null。当您创建一个Student对象时,它实际上调用Student构造函数。在数组实例化/初始化中,您分配了足够的内存来容纳10个Student对象。在stu的实例化/初始化中,stu变量引用内存中的一个Student对象初始化数组会为每个元素创建空白。它不创建任何单个元素。这个 Student[] stus = new
Student[]stu=新生[10]代码>
学生stu=新学生()代码>
他们之间有什么区别
初始化对象数组时发生了什么?为什么它不调用构造函数?初始化数组时,所有元素最初都为null。当您创建一个Student
对象时,它实际上调用Student
构造函数。在数组实例化/初始化中,您分配了足够的内存来容纳10个Student对象。在stu的实例化/初始化中,stu变量引用内存中的一个Student对象初始化数组会为每个元素创建空白。它不创建任何单个元素。这个
Student[] stus = new Student[10];
因此,创建了十个空白,每个空白中可以放置一个Student
对象。没有其他类型——除非它是子类学生
。这十个空格中的每一个都是null
,直到您明确地将一个新对象放入其中。比如
stus[1] = new Student(); //1 is the *second* element
初始化对象将创建该类型的新对象。这个
Student stu = new Student();
创建一个新的Student
对象。或者,这个
Student stu;
声明对象,但不创建它。就像初始化数组一样。这为(一)个Student
对象分配了一个空间,但没有创建它
重复一下,这将创建(初始化)它——这意味着将它放置在声明的空间中:
最后,正如@FlorentBayle所提到的,您不应该将这些对象命名为相同的名称。考虑我上面提到的数组命名:<代码> STUS ,它更能指示它的实际值。
更多信息:
我同意PakkuDon的观点,我不知道你所说的“
结构-功能”
”是什么意思
初始化对象数组将生成一个新的Student
对象数组,它基本上是一个大小Student[x]
的列表,其中x
是数组中的对象数。
当您实际将Student
对象添加到数组中时,它将调用Student
构造函数,并创建Student
对象
简单地创建一个Student
对象实际上会创建该对象,而不仅仅是一个可以容纳它们的列表。在Student[]stu=newstudent[10]代码>初始化一个包含10个元素的数组,该数组占用学生对象的10X大小。但是使用stu=newstudent()
它只占用Student
对象的1x大小 Student[]stu=新学生[10]代码>创建一个可以容纳10个学生对象的数组。每个元素都初始化为null
学生stu=新学生()代码>创建一个学生
至于你关于在构造对象数组时为什么不调用构造函数的问题,我会问“为什么会这样?”编译器只知道数组可以存储作为Student实例的对象。编译器如何知道应该调用哪个构造函数来构造这些对象?如果您的类Student缺少无参数构造函数,编译器应该怎么做
还有一个事实是,程序员可能希望在运行时使用从外部源检索的数据填充数组。将默认值设置为null
会更有意义,而不是用一堆将在以后丢弃的任意实例填充数组,因为这会给程序增加不必要的开销 给定Student.java
:
public class Student
{
private String name;
public Student () { name = ""; }
public String getName () { return name; }
public void setName (String name) { this.name = name; }
}
然后我们有:
Student[] A = null;
A
是类型为Student[]
的引用,表示学生引用的数组
- 引用是一个内存地址
A
具有null
值;意思是它什么都没有
Student[] B = new Student[10];
B
是Student[]类型的参考
新生[10]代码>将保留10个类型为Student
B
获取new
返回的引用,该引用引用了Student
引用的10个块
new
保留的所有参考块被初始化为null
- 正在尝试
B[0].getName()
将编译,但在运行时将抛出NullPointerException
B[0] = new Student();
C = new Student();
B[0]
是数组中的第一个元素B
最初指的是null
newstudent()
将通过调用其构造函数Student()
来创建类型为Student
的对象,该构造函数称为默认构造函数
- 在此之后,您可以调用学生函数,如
B[0].getName()代码>
C
是类型为Student
C
的值为null
,这意味着它不引用任何内容
- 正在尝试
C.getName()
将编译,但在运行时将抛出NullPointerException
B[0] = new Student();
C = new Student();
C
将采用newstudent()返回的引用代码>
newstudent()
将通过调用其构造函数Student()
创建类型为Student
的对象,并返回其内存引用
你所说的结构功能是什么意思?您是指构造函数吗?stu=new Student()如果stu
是刚才声明的Student
的数组,则code>将不起作用。如果不是,你真的应该选择另一个名字。关于数组的Java教程。@PakkuDon谢谢,我不是来自英语国家。