java的内存是由JVM管理分配的,分为三个区域,分别是堆、栈和方法区。
堆:
1)用于存储所有被new出来的对象(包括成员变量)
2)java有垃圾回收器(GC)不定时的到内存中清扫垃圾,可调用System.gc()可以建议虚拟机尽快调度GC来回收
3)内存泄漏:不再使用的内存没有被及时的回收
所以建议不再使用的对象,及时将引用设置为null
4)成员变量生命周期:创建对象时储存在堆中,对象被回收时一并被回收
栈:
1)用于存储正在调用的方法中的所有局部变量(包括参数)
2)JVM会为每一个正在调用的方法分配一块对应的栈帧,方法调用结束时,栈帧被清除,局部变量一并被清除
3)局部变量的生命周期:方法结束时与栈帧一并被清除
方法区:
1)用于存储.class字节码文件(包括方法)
2)方法只有一份,通过this来区分具体的对象
继承的作用主要是实现代码的复用,通过extends来实现继承;子类继承父类之后,子类不仅有自己的属性和行为,也具有父类的属性与行为了。
继承特点:
1)一个父类可以有多个子类,但一个子类只能有一个父类(单一继承)
2)继承具有传递性,可以子继父,子子继子
3)java规定:构造子类之前必须先构造父类
子类构造中若自己不调用父类的构造,则默认super()调用父类的无参构造;若自己调用了父类的构造,则不再默认提供
super()调用父类构造,必须位于子类构造的第1句
super:
1)指代当前对象的父类对象
2)用法:super.成员变量名----访问父类的成员变量
super.方法名()----调用父类的方法
super()----调用父类的构造方法
向上造型:
1)父类型的引用指向子类的对象
2)能点出来什么,看引用的类型
至此我们便可以把昨天俄罗斯方块的七个类的相同代码抽成一个Tetromino(意思为四格拼版)父类,S、Z、L、J、I、O、T便继承该父类即可。
下面我们将定义一个测试类----TTest,更直观的看见程序:
结果为:
由此可见,程序逻辑是没有错误的,其他六个类构造就特别简单了。