Java

Java 基础

《Java 编程思想》

Java 进阶

《Effective Java》 《Java并发编程-设计原则与模式》 《设计模式》 《重构》

相关资源 Java资源大全中文版 极客学院Wiki Java

对象

Java 的对象是通过引用来访问的。 数据存储位置

  • 寄存器,位于处理器内部,Java 程序中感知不到寄存器的存在
  • 堆栈,通过堆栈指针访问,对象引用位于堆栈中,基本类型也存放在堆栈中
  • 堆,存放所有 Java 对象
  • 常量存储,常量值存放在程序代码内部,不会被改变。保存在已编译的 .class 文件中,存放基本类型和对象型的常量值。还包括文本形式出现的符合引用。
  • 非 RAM 存储

基本类型

存放在堆栈,数值类型都有正负,有对应的包装器类。高精度数字没有对应的基本类型。

数组

使用前必须初始化,有范围检查。一个数组对象,实际是一个引用数组。

Java 不需要 sizeof,因为类型占用的大小在所有机器上都是一样的

finalize

  • 对象可能不被垃圾回收
  • 垃圾回收不等于析构
  • 垃圾回收只与内存有关

判断使用组合还是继承的方法是:是否需要向上转型

final 数据

使用前必须初始化,初始化后不可改变值。

final 参数

不能在方法中更改参数引用指向的对象。

final 方法

锁住方法,防止继承类修改方法的含义,不会被覆盖。早期Java实现中,声明为final的方法编译器会把针对方法的调用转化为内嵌调用。“关闭”动态绑定。

final 关键字

类中的private方法都隐式的指定为final

final 类

final类中不允许被继承

类初始化顺序

基类static->子类static->基类成员变量->基类构造函数->子类成员变量->子类构造函数

构造器是隐式声明static

使用内部类的原因是:每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个接口的实现,对应内部类都没有影响。

回调

回调的一个好处是decouple。 客户端只需要关心业务(比如匿名内部类的具体实现)而不用再关心一些资源的连接释放什么的,这些交给平台类中的模板方法。

回调实质上是指一个类尽管实际上实现了某种功能,但是没有直接提供相应的接口,客户类可以通过这个类的内部类的接口来获得这种功能。而这个内部类本身并没有提供真正的实现,仅仅调用外部类的实现。可见,回调充分发挥了内部类所具有的访问外部类的实现细节的优势。

编程上来说,一般使用一个库或类时,是你主动调用人家的API,这个叫Call,有的时候这样不能满足需要,需要你注册(注入)你自己的程序(比如一个对象),然后让人家在合适的时候来调用你,这叫Callback。参考

为什么引入内部类?

  • 完善多重继承
    • 内部类不仅可以自己继承类,也可以使用外部类的方法,相当于多重继承
  • 实现事件驱动系统
  • 闭包
    • 类库时注册回调
    • 父类和实现接口出现同名函数

集合类

继承关系

设计模式资料

results matching ""

    No results matching ""