我想问你什么时候初始化一个对象
例如,我有这个简单的Java代码:
public class Test {
public static void main(String args[]) {
Student student = new Student();
student.setName("John");
student.setId(123);
}
}
那么学生对象究竟是什么时候初始化的呢?执行new Student()
时是否初始化?还是何时执行Student student = new Student()
?还是在二传手被处决之后?任何反馈将不胜感激!
它在调用 new + 构造函数时初始化。
如文档所述
这些陈述中的每一个都有三个部分(下面详细讨论(:
声明:以粗体设置的代码都是变量声明将变量名称与对象类型关联。
实例化: new 关键字是创建对象的 Java 运算符。
初始化:新运算符后跟对 构造函数,用于初始化新对象。
执行
new Student()
时是否初始化?
是的。返回结果对象时,它已被初始化(由构造函数代码(。
还是在二传手被处决之后?
对象的字段在构造函数返回时初始化。它们可以设置为null
或""
或0
或类似,但它们使用某个值进行初始化。
如果Student
对象对这些字段具有null
或任何内容无效,则构造函数应接受它们的值作为参数,或者类应公开用于生成实例的构建器样式接口,以便在您拥有Student
实例时,您知道这些字段已填充有意义的值。这是否必要是特定于域的。
这取决于您的构造函数类。 可能是第三行,但如果你的突变器方法创建新对象,那么第 4 行和第 5 行。
当执行新的 Student((时,它会被初始化。
- new Student((- 这调用学生类的构造函数。
之后,生成的对象被分配给数据类型为Student的">student"变量。
每当调用 'new' 关键字时,都会实例化对象并调用构造函数,从而导致对象初始化。
首先,看看二传手和构造函数之间的区别以及它们的优缺点。
构造 函数:
1( 创建对象时调用构造函数。
2( 每个对象只调用一次。
3( 您可以使用构造函数在实例化点设置值。
4( 它不允许任何返回类型。
5( 隐式调用构造函数。
二传手:
1( 调用 setter 来更改初始化后对象的值。
2(一个二传手可以调用任意次数。
3( 您可以使用 setter 在实例化点之后设置值。
4(它允许返回类型。
5( 显式调用二传手。
结论:
1( 执行新 Student(( 时初始化对象
2( 如果您认为初始化是强制性的,并且在使用对象之前具有所需的值,请使用构造函数。
3( 当变量的初始化是非强制性的,并且在对象初始化时没有值时,请使用 setter 方法。
4(一般来说,我们应该避免二传手,因为它在某种程度上违反了封装原则。
学生 = 新学生((;
当您调用 new 然后调用构造函数时,您正在创建与构造函数类类型相同的对象,接收 new + 构造函数的对象必须是相同的类型。
再比如:
必须与您的类相同的对象 + 对象信号的名称 = 然后是 new 加构造函数;
Example exaple = new Example();
当你打电话时
Student student = new Student();
您正在内存中创建对象。创建后,您可以使用对象的方法,例如 getter 和 setter。