1. 基础了解
- 如果局部变量是对该对象的引用,只有变量本身会放在栈上,对象本身只会存在于堆上;实例变量存在于对象所属的堆空间上;
- 构造函数必须与类同名且没有返回类型;
- 唯一能够调用构造函数的办法就是新建一个类;
- 如果一个类有一个以上的构造函数,这代表它们也是重载的(其参数的顺序与类型,只要是不一样即可);
- 如果你已经写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,则你必须自己动手写;编译器只会在你完全没有设定构造函数时才会设定一个默认的无参构造函数;
- 实例变量有默认值,原始的默认值是0/0.0/false,引用的默认值是null;
- 完全没有其他方法能够创建对象,只能通过new来产生新对象;
4. 构造函数的执行
在创建新对象时,所有继承下来的构造函数都会执行,执行new的指令是个重大事件,它会启动构造函数连锁反应,构造函数在执行的时候,第一件事就是去执行它的父类的构造函数,这会连锁反应到Object这个类为止。
super()与this()的区别
- 调用父类构造函数的唯一方法就是super(),编译器默认会加上super()的调用;
- this()是对对象本身的引用,使用this()来从某个构造函数调用同一个类的另外一个构造函数。
- super()与this()不能兼得;
- super()的调用必须是构造函数的第一个语句,super()函数不只是用在构造函数中;
- this()只能用在构造函数中,且必须是第一行语句;
5. 生命周期
- 对象生命周期要看引用变量的生命周期而定;
- 局部变量只会存活在声明该变量的方法中;
- 实例变量的寿命与对象相同。如果对象还活着,则实例变量也会是活的;