第10天

1.内存管理:由JVM来管理

1)堆:

1.1)new出来的对象,包括不加static的成员变量(实例变量)
1.2)垃圾:没有任何引用所指向的对象
     垃圾回收器(GC)不定时到内存中清扫垃圾
     回收过程是透明的(看不到的),并非是一发现垃圾就立刻回收
     调用System.gc()可以建议虚拟机尽快调度GC来回收
1.3)内存泄露(内存浪费):不再使用的内存还没有被及时的回收
     建议:对象不再使用时及时将引用设置为null

2)栈:

2.1)存储正在调用的方法中的局部变量(包括方法的参数)
2.2)调用方法时,会在栈中为该方法分配一块对应的栈帧,
     栈帧中存储局部变量(包括方法的参数),当方法执行结束后,栈帧被清除,局部变量一并失效
2.3)局部变量的生命周期:调用方法时存储在栈中,方法结束时与栈帧一并被清除

3)方法区:

3.1)存储.class字节码文件(包括静态变量、方法)
3.2)方法只有一份,通过this来区分具体的对象

2.面向对象三大特征:

1)封装:

1.1)类:封装的是对象的属性和行为
1.2)方法:封装的是具体的业务逻辑功能实现
1.3)访问控制修饰符:封装的是具体的访问权限

2)继承:

2.1)作用:代码复用
2.2)超类:所有派生类所共有的属性和行为
    接口:部分派生类所共有的行为
    派生类:派生类所特有的属性和行为
2.3)特点:单一继承、多接口实现(但接口1 extends 接口2,接口3)、传递性-----Object:所有类的鼻祖(所有类都是Object类的派生类)

3)多态:

3.1)意义:行为的多态(抽象方法都是多态的)
    对象的多态(所有对象都是多态的)
3.2)向上造型、强制类型转换、instanceof
3.3)多态的表现形式:
    3.3.1)重写:根据对象的不同来表现多态
    3.3.2)重载:根据参数的不同来表示多态

3.面向对象课程安排:

第一天:
  理论:
    1.什么是类?什么是对象?
    2.如何创建类?如何创建对象?如何访问成员?
  项目:
    3.创建6个对象类,创建World类并测试
第二天:
  理论:
    1.方法的重载
    2.构造方法
    3.this
    5.null和NullPointerException
    6.引用类型之间画等号
  项目:
    4.给6个对象类添加构造方法,并测试
第三天:
  理论:
    1.引用类型数组
    3.继承
    5.super
  项目:
    2.设计小敌机数组、大敌机数组、小蜜蜂数组、子弹数组,并测试
    4.创建FlyingObject超类,6个对象继承
    6.给FlyingObject设计两个构造方法,6个对象类分别继承
第四天:
  理论:
    1.向上造型
    3.方法的重写
    4.重写与重载的区别
  项目:
    2.将小敌机、大敌机、小蜜蜂数组合为FlyingObject数组,并测试
    5.在6个派生类中重写超类的step()
    6.画窗口
第五天:
  理论:
    1.package和import
    2.访问控制修饰符
    4.final
    5.static
  项目:
    3.给类中成员添加访问控制修饰符
    6.给6个对象类添加图片属性
第六天:
  理论:
    1.static final常量
    3.抽象方法
    4.抽象类
  项目:
    2.将窗口的宽和高设计为常量,适当地方做修改
    5.画对象
第七天:
  理论:
    1.成员内部类
    2.匿名内部类
  项目:
    3.敌人入场
    4.子弹入场
    5.飞行物移动
第八天:
  理论:
    3.接口
  项目:
    1.英雄机随着鼠标移动
    2.删除越界的敌人和子弹
第九天:
  理论:
    1.多态
  项目:
    2.子弹与敌人的碰撞
    3.画分和画命
第十天:
  理论:
    1.内存管理
  项目:
    2.英雄机与敌人的碰撞
    3.检测游戏结束
    4.画状态

4.打桩与debug调试----当程序的运行结果与你所预期的结果不同时:

4.1)打桩:System.out.println(数据);

4.2)Debug调试工具:

4.2.1)添加断点(最左边双击左健)
4.2.2)掌握四个健:
    4.2.2.1)F5:单步调试(会进入到方法中)
    4.2.2.2)F6:逐过程调试(不会进入到方法中)
    4.2.2.3)F7:结束方法的调试
    4.2.2.4)F8:直接跳到下一个断点(若后面没有断点则结束调试)
4.2.3)会看两个东西:
    4.2.3.1)会看变量
    4.2.3.2)会看表达式(选中表达式,右健Watch)

项目功能:

1.英雄机与敌人的碰撞
2.检测游戏结束
3.画状态-----启动、运行、暂停、结束

Shoot射击游戏第十天:

1.英雄机与子弹的碰撞:

1)借用FlyingObject的hit()碰撞检测、goDead()飞行物去死
  在Hero中设计subtractLife()减命、clearDoubleFire()清空火力值
2)英雄机与敌人的碰撞为定时发生的,所以在run()中调用heroBangAction()实现英雄机与敌人的碰撞
  在heroBangAction()中:
  遍历敌人,判断若撞上了:
  敌人去死、英雄机减命、英雄机清空火力值

2.检测游戏结束:

1)借用Hero的getLife()获取命数
2)检测游戏结束为定时发生的,所以在run()中调用checkGameOverAction()检测游戏结束
  在checkGameOverAction中:
  则将当前状态修改为游戏结束状态

3.画状态:

1)在World中设计START、RUNNING、PAUSE、GAME_OVER状态常量,state当前状态变量
  在World中设计start,pause,gameover静态图片,static块中初始化
  在paint()中: 基于不同的状态画不同的图
2)将run里面的那一堆action设计为仅在运行状态RUNNING下执行
  将鼠标移动事件是英雄机随着鼠标动设计为仅在运行状态RUNNING下执行
3)重写mouseClicked鼠标点击事件:
    启动状态变为运行状态,游戏结束状态先清理现场再变启动状态
  重写mouseExited鼠标移出事件:
    运行状态变为暂停状态
  重写mouseEntered鼠标移入事件:
    暂停状态变为运行状态