1、对象导论
- 计算机是头脑延伸的工具
- 抽象:所有编程语言、数学都是抽象。所能解决的问题复杂性,直接取决于抽象的类型和质量。
- 对象:具有状态(内部数据),方法(在自身上执行操作),标识(内存唯一地址)
- 对象:每个对象都是服务提供者。
- 对象:通过引用操作对象。引用的对象。java只有这一种操作方式。
- 直接常量:200L;10f;0x2f;有时候需要告诉编辑器常量类型
- 垃圾回收:只与内存有关。GC负责释放对象占用的内存。
- finalize:回收之前调用。释放非对象内存。比如本地方法创建的
- 命名:见名知义、简短(保持特有,其他使用缩写)
6、访问权限控制
- 访问控制:隐藏具体实现:隔离变化,变与不变。与最初的实现并不恰当有关(未来重构)
- 包:库单元。未命名包:默认包。
- 源文件:编译单元。编译单元不能并列有多个public类,(public类内部可以再有public类)
- 权限:public(接口) > protected(继承+包) > 包(default) > private
7、复用类
- 复用类:利用现有类生成新类。java所有问题的解决都是围绕“类”展开的。
- 组合:新类中引入现有类的对象,作为成员变量/对象。String被无数次的组合了。
- 继承:会继承现有类的接口。组合不会。
- 代理:java没有对此直接支持。间接实现:新类中引入现有类的对象(组合),然后新类暴漏成员对象的所有方法(类似继承)
8、多态
- 多态:分离“做什么”、“怎么做”。分离接口与实现。
- 封装:合并特征和行为来创建新的数据类型。
- 隐藏实现:接口与实现分离。
- 构造器:不是多态的。是隐藏static的
- 向上转型:安全的。父类不会超出子类的接口。
9、接口
- 接口:使抽象更进一步。
- 完全解耦:抽象类做不到,必须加入到抽象类的继承结构中。
- 接口域:自动隐藏式static,final的。
10、内部类
- .this:内部类方法中:return Outer.this;
- .new: outer.new Inner();
- 存在意义:可以独立实现一个接口,与外部类无关。
- 例子:工厂方法、线程、框架。。。
- Swing-UI控制框架:事件驱动系统。
- 框架:分离变与不变。框架不知道任何具体的信息。action()通过内部类。
11、类型信息Class
- 运行时发现和使用类型信息。
- RTTI:Run-Time Type Information
- 类字面常量:Integer.class,Object.calss;
- 泛化的Class引用:Class c <==> Integer.class
- Class类:只是Object的子类。所以Integer.class与Number.class没有继承关系。
- 编译期未知:Class< ? > forName(String className):
- 编译期已知:Integer.class