New关键字
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
为Point的对象创建了一个实例,在内存里开辟了两个空间:一块空间在堆,存放new Point()这个对象;另一块空间在栈,存放originOne,originOne值即new Point(23, 94)这个对象的内存地址。
Object o;
声明了一个引用,存放在栈中,类型是Object,值为null,没有指向任何一个对象。
创建一个Java对象需要三步:声明引用变量、实例化、初始化对象实例。
(1) 声明一个变量来指向一个对象,即引用
如果你只是声明一个像originOne这样的引用变量,其价值将待定,直到有一个对象真正被创造和分配给它。只是简单地声明一个引用变量而并没有创建一个对象。对于这样,你需要使用new运算符。在你的代码中使用它之前,你必须指定一个对象给originone。否则,你会得到一个编译器错误-----空指针异常。
(2) 实例化一个类对象
new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向该内存的引用。new运算符也调用了对象的构造函数。“实例化一个类的对象”的意思就是“创建对象”。创建对象时,你正在创造一个类的“实例”,因而“实例化”一个类的对象。new运算符需要一个单一的,后缀参数,需要调用构造函数。构造函数的名称提供了需要实例化类的名称。
(3) 初始化一个类对象
调用构造函数初始化对象
public class Point {
public int x = 0;
public int y = 0;
/**
* constructor
*
* @param a
* @param b
*/
public Point(int a, int b) {
x = a;
y = b;
}
}
总的来说,new关键字是通过虚拟机new指令实现的。