堆(heap)——对象、对象的实例变量在堆上
栈(stack)——方法调用和局部变量在栈上
- 实例变量:实例变量是被声明在类而不是方法里面。实例变量存在于所属的对象中(堆上)。
局部变量:局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止) - 当你调用一个方法时,该方法会放在调用栈的栈顶,执行完成后它就被释放掉
- 构造函数(可以自己写,否则编译器会帮你写一个)
(1)构造函数在新建一个对象的时候执行,唯一能够调用构造函数的方法就是新建一个类
(2)构造函数的名称一定要与类名相同,构造函数没有返回类型
(3)构造函数会在对象能够被引用之前就执行
(4)可以用构造函数给对象的实例变量赋值或设置实例变量
(5)可以给类设置两个构造函数,一个用来设定默认值(没有参数传入的情况下),另一个用接收的参数给对象赋值。
(6)如果已经写了一个有参数的构造函数,并且需要一个没有参数的构造函数,则必须自己动手写
(7)如果类有一个以上的构造函数,则参数一定要不一样(参数的顺序与类型,而不是参数名) - 父类的构造函数
(1)在创建新对象时,所有继承下来的构造函数都会执行
(2)方法的调用按栈的结构来进行,最早调用,最晚释放
(3)在子类的构造函数中调用super()会把父类的构造函数放在堆栈的最上方(如果没有调用,编译器会自动帮你加上),对super()的调用必须是构造函数的第一个语句
(4)使用this()来从某个构造函数调用同一个类的另外一个构造函数
this()只能用在构造函数中,且必须是第一行语句。
super()与this()不能兼得 - 变量的生命周期
(1)局部变量只会存活在声明该变量的方法中,局部变量只能在声明它的方法在执行中才能被使用
(2)实例变量的寿命与对象相同,如果对象还活着,则实例变量也会是活的 - 当最后一个引用消失时,对象就会变成可回收的
- 有3种方法可以释放对象的引用
(1)引用永久性的离开他的范围
(2)引用被赋值到其他的对象上
(3)直接将引用设定为null