9.对象的前世今生

对象有生死.必须为对象的生命循环周期负责

栈与堆:生存空间

栈:方法调用和局部变量
堆:所有对象

方法会被堆在一起,栈顶上方法时目前正在执行中的

要点

  1. 我们关系栈与堆这两种内存空间
  2. 实例变量是声明在类中方法之外的地方
  3. 局部变量声明在方法或方法的参数上
  4. 所有局部变量都存在于栈上相对应的堆块中
  5. 对象引用变量与primitive主数据类型变量都是放在栈上
  6. 不管是实例变量或是局部变量,对象本身都会在堆上

创建对象的奇迹

声明对象和赋值的三个步骤

  1. 声明引用变量
  2. 创建对象(调用了类的构造函数)
  3. 连接对象和引用

在创建新对象时,所有继承下来的构造函数都会执行

调用父类的构造函数

super();//不写则编译器会补全
this()和super()不能同时使用

对象活多久

  1. 局部变量只会存活在声明该变量的方法中
  2. 实例变量的寿命与对象相同.如果对象还活着,则实例变量也会是活的

life 和 scope 区别

  1. life : 只要变量的堆栈块还存在与堆栈上,局部变量就算活着.也就是说,活到方法执行完毕位置
  2. scope: 局部变量的范围只限于声明他的方法之内.当方法调用别的方法时,该变量还活着,但不在目前范围内.执行其他方法完毕返回时,范围也就跟着回来.

对象杀手

  1. 永久性的离开他的范围
  2. 引用被复制到其他对象上
  3. 直接将引用设定为null