第五章-继承

  • 继承使类具有复用性,当需要复用一个类时可以直接继承它。
  • 多态是在继承的基础上的概念,ex: B是A的子类,他们都有方法f,调用哪个类的f方法取决于对象是A类还是B类。多态使得对子类的扩展不需要修改父类的代码。
  • 动态绑定:子类父类都有相同的方法名 f(int x),虚拟机寻找应该调用哪个方法的过程,就是动态绑定。方法重载也是在这个时候发生。
    • 注意!动态绑定和动态代理不能混淆!
  • 静态绑定:如果是static, private, constructor, final这些域非常确定的方法,虚拟机直接调用。

    第六章-接口与内部类

  • 接口中方法默认为public

  • 接口中的常量默认为public static final

    第十二章-泛型

  • 泛型使得代码可以被不同类型的对象所重用

  • 增强可读性(根据<>内的类名知道方法接受什么类)
  • 增强安全性(<>中的类与提供给它的类不一致时,在编译时就会报错,不用等到运行时)

    第十四章-多线程

    为什么使用多线程?
  1. 线程间共享变量比进程间共享变量更容易
  2. 创建和维护线程的开销小

如何开启一个线程?

  1. 创建一个类,实现Runnable接口的run方法
  2. 实例化这个类,给Thread对象thread
  3. thread.start()

run()和start()方法的区别?

  • run()不会启动新线程,只会调用同一个线程中的run方法
  • start()开启线程并运行新线程的run方法

    volatile

    1. // volatile不能保证原子性
    2. private volatile boolean done;
    3. public void flipDone() {
    4. done = !done; // not atomic, done的值可能被其它线程覆盖
    5. }