9.对象的前世今生
对象有生死.必须为对象的生命循环周期负责
栈与堆:生存空间
栈:方法调用和局部变量
堆:所有对象
方法会被堆在一起,栈顶上方法时目前正在执行中的
要点
- 我们关系栈与堆这两种内存空间
- 实例变量是声明在类中方法之外的地方
- 局部变量声明在方法或方法的参数上
- 所有局部变量都存在于栈上相对应的堆块中
- 对象引用变量与primitive主数据类型变量都是放在栈上
- 不管是实例变量或是局部变量,对象本身都会在堆上
创建对象的奇迹
声明对象和赋值的三个步骤
- 声明引用变量
- 创建对象(调用了类的构造函数)
- 连接对象和引用
在创建新对象时,所有继承下来的构造函数都会执行
调用父类的构造函数
super();//不写则编译器会补全
this()和super()不能同时使用
对象活多久
- 局部变量只会存活在声明该变量的方法中
- 实例变量的寿命与对象相同.如果对象还活着,则实例变量也会是活的
life 和 scope 区别
- life : 只要变量的堆栈块还存在与堆栈上,局部变量就算活着.也就是说,活到方法执行完毕位置
- scope: 局部变量的范围只限于声明他的方法之内.当方法调用别的方法时,该变量还活着,但不在目前范围内.执行其他方法完毕返回时,范围也就跟着回来.
对象杀手
- 永久性的离开他的范围
- 引用被复制到其他对象上
- 直接将引用设定为null
- 本文链接: https://halo.cjh.kim/archives/headfirstjava9md
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!