17Java面向对象-------内存管理、继承、super

1.内存管理

1.1堆

  • 用于存储所有new出来的对象(包括成员变量)
  • 成员变量的生命周期
    创建对象时存在堆中,对象被GC回收时一并消失
  • 垃圾回收器(GC)不定时到对堆中查看看到垃圾自动回收
    垃圾:没有任何引用指向的对象
    回收过程是透明的,并不是一看到垃圾就马上回收
    若想让它快一些收,可以调用System.gc()
  • 内存泄露:不再使用的对象没有被及时回收
    建议,当对象不再使用时应及时将引用设置为null
对象存储在堆中
  • jvm在其内存空间中开辟了一个称为“堆”的存储空间;

  • 这部分空间用于存储使用new关键字所创建的对象
    在这里插入图片描述

成员变量的生命周期
  • 访问对象需要依靠引用变量
  • 当一个对象没有任何引用时,被视为废弃的对象,属于被回收的范围。该对象的所有成员变量也随之被回收
  • 成员变量的生命周期为:从对象在堆中创建开始到对象从堆中被回收结束
Cell C = new Cell();
c = null;
//不再指向刚分配的对象空间,成员变量失效

1.2栈

  • 用于存储正在调用中的方法的所有局部变量(包括参数)
  • 调用方法时在栈中为该方法分配一块对应的栈帧,栈帧中包含所有的局部变量(包括参数)方法调用结束时,栈帧消失,局部变量一并消失
  • 局部变量的生命周期:
    调用方法时存在栈中,方法调用结束时与栈帧一并消失

1.3方法区

  • 用于存储.class字节码文件(包括方法)
  • 方法只有一份,通过this来区分到底是哪个引用

2.继承

  • 目的:避免代码重复,有利于代码的重用

  • 通过extends实现继承

  • 父类:所有子类所共有的属性和行为
    子类:子类所特有的属性和行为

  • 子类继承父类后,子类具有:子类+父类

  • 一个父类可以有多个子类
    一个子类只能有一个父类----单一继承

  • 继承具有传递性

  • JAVA规定:构造子类之前必须先构造父类,子类构造中没有调用父类的构造方法,则默认super() 来调用父类的无参构造,若自己调了,则不再默认提供。super调用父类构造,必须位于子类构造的第一句

  • 泛化的过程
    在这里插入图片描述

3.super:指代当前对象的父类对象

  • super.成员变量名------访问父类的成员变量
  • super.方法名()----------调用父类的方法
  • super()--------------------调用父类的构造方法
classs Foo{
    int value;
    Foo(int value){
       this.value = value;
    }
}

/**
* 编译错误,子类的构造
* 方法中没有调用父类的构**造方法
* (虽然有默认的super(),但是父类
* 中没有定义无参的构造方法)
*/
class Goo extends Foo{
       int num;
       goo(int num){
          this.num = num;
       }
}


/**
*编译正确,子类中调用了父类
*的构造函数,初始化了继承自父类的
*value成员变量
*/
class Goo extends Foo{
     int num;
     Goo(int value,int num){
         super(value);
         this.num = num;
     }
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值