9.构造器与垃圾收集器

堆(heap)——对象、对象的实例变量在堆上
栈(stack)——方法调用和局部变量在栈上

  1. 实例变量:实例变量是被声明在类而不是方法里面。实例变量存在于所属的对象中(堆上)。
    局部变量:局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)
  2. 当你调用一个方法时,该方法会放在调用栈的栈顶,执行完成后它就被释放掉
  3. 构造函数(可以自己写,否则编译器会帮你写一个)
    (1)构造函数在新建一个对象的时候执行,唯一能够调用构造函数的方法就是新建一个类
    (2)构造函数的名称一定要与类名相同,构造函数没有返回类型
    (3)构造函数会在对象能够被引用之前就执行
    (4)可以用构造函数给对象的实例变量赋值或设置实例变量
    (5)可以给类设置两个构造函数,一个用来设定默认值(没有参数传入的情况下),另一个用接收的参数给对象赋值。
    (6)如果已经写了一个有参数的构造函数,并且需要一个没有参数的构造函数,则必须自己动手写
    (7)如果类有一个以上的构造函数,则参数一定要不一样(参数的顺序与类型,而不是参数名)
  4. 父类的构造函数
    (1)在创建新对象时,所有继承下来的构造函数都会执行
    (2)方法的调用按栈的结构来进行,最早调用,最晚释放
    (3)在子类的构造函数中调用super()会把父类的构造函数放在堆栈的最上方(如果没有调用,编译器会自动帮你加上),对super()的调用必须是构造函数的第一个语句
    (4)使用this()来从某个构造函数调用同一个类的另外一个构造函数
    this()只能用在构造函数中,且必须是第一行语句。
    super()与this()不能兼得
  5. 变量的生命周期
    (1)局部变量只会存活在声明该变量的方法中,局部变量只能在声明它的方法在执行中才能被使用
    (2)实例变量的寿命与对象相同,如果对象还活着,则实例变量也会是活的
  6. 当最后一个引用消失时,对象就会变成可回收的
  7. 有3种方法可以释放对象的引用
    (1)引用永久性的离开他的范围
    (2)引用被赋值到其他的对象上
    (3)直接将引用设定为null
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容