我尝试通过搜索引擎搜索这个问题,但可以找到一个主题来解释初始化类和实例化对象之间的区别。
有人可以解释它们有何不同吗?
与该主题相关的三个术语:声明、初始化和实例化。
从后到前工作。
实例化
这是为对象分配内存的时候。这就是new
关键字正在做的事情。new
从关键字返回对已创建对象的引用。
初始化
这是将值放入分配的内存中的时间。这就是类的构造函数在使用new
关键字时所做的事情。
变量还必须通过将内存中某个对象的引用传递给它来初始化。
宣言
这是当您向程序声明将存在某种类型的对象以及该对象的名称时。
同一行上的初始化和实例化示例
SomeClass s; // Declaration
s = new SomeClass(); // Instantiates and initializes the memory and initializes the variable 's'
将不同行上的变量初始化到内存的示例
void someFunction(SomeClass other) {
SomeClass s; // Declaration
s = other; // Initializes the variable 's' but memory for variable other was set somewhere else
}
我还强烈推荐阅读这篇文章,了解 Java 如何处理传递变量的本质。
当 Java 类被“加载”到 JVM 中时,必须以多种方式初始化类表示。
有一组特定的术语用于指代类初始化,但我不记得具体内容了。某些事情只能在类被初始化到特定点之后发生,等等。
实例化对象只能在类已加载和初始化之后发生(尽管所有方法都不需要经过验证)。对象的大小是从类中获取的,并且该堆被定位并归零。对象头中填充了指向类的指针和用于管理类的其他字段。然后调用该类的适当构造函数方法(它将调用任何超级的构造函数)。
点 originOne = new Point(23, 94); -- 示例 1
矩形 rectOne = new Rectangle(originOne, 100, 200); -- 示例 2
1)声明:加粗的代码是所有变量声明,将变量名与对象类型相关联。
2) 实例化: new 关键字是创建对象的Java 运算符。
3) 初始化: new 操作符之后是对构造函数的调用,该构造函数初始化新对象。
参考:https ://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html#:~:text=Instantiation%3A%20The%20new%20keyword%20is,which%20initializes%20the%20new%20object .
使用静态初始化块来初始化类。(静止的 { })。它不是一个方法,它是一个初始化器。它在第一次引用类本身时执行。
例如,通过调用其构造函数使用 new 关键字来实例化对象。那时静态初始化块将不会被执行。