800 likes | 988 Views
Java 开发基础. 目录. 第 1 章 Java 体系结构 第 2 章 基本程序结构设计 第 3 章 对象与类 第 4 章 继承 第 5 章 接口与内部类 第 6 章 事件处理 第 7 章 异常与调试 第 8 章 流与文件. ☞. Java 体系结构. Java 体系结构包括如下四大类技术: Java 程序设计语言 Java class 文件格式 Java API Java 虚拟机. Java 体系结构(续). 目录. 第 1 章 Java 体系结构 第 2 章 基本程序结构设计 第 3 章 对象与类 第 4 章 继承
E N D
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
Java体系结构 • Java体系结构包括如下四大类技术: • Java程序设计语言 • Java class文件格式 • Java API • Java 虚拟机
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
大纲 • 数据类型 • 变量 • 运算符 • 字符串 • 注释 • 输入输出 • 控制流程 • 数组
数据类型 • 数据类型 • 整型 • 浮点型 • char型 • boolean型 Char :长度 2字节无符号整型 0 ~ 65535 Boolean:true 、 false
数据类型 • 数据类型操作注意事项 • 尽量使用适合长度的数据类型操作 • 尽量使用约定俗成的数据类型做常用操作 • 注意数据操作时可能发生的数据溢出及除0错误 • 进行金额操作时避免使用float 和 double,使用无损精度操作的大数值类型 BigInteger 和 BigDecimal
变量 • 变量 • 初始化变量 • 常量 • 注意 • 定义变量时尽量赋予初始化值 • 变量的命名要简明达意 • 遵守变量命名的大小写规范 • 使用合适的描述符,尽可能在使用变量时定义,减小可见性
运算符 • 运算符 • 算术运算符 • 自增自减运算符 • 关系运算符与boolean运算符 • 位运算符 • 运算相关注意事项 • 使用JDK库实现常用算法及函数 • 数值类型的自动转换规则 • 强制类型转换及截位 • 枚举类型的使用
字符串 • 字符串 • 代码点与代码单元 • 字符子串与拼接 • 相等的比较 • 注意事项 • 编码转换方法 • 子串下标计算 • 拼接的性能 • String 方法 intern() 的应用
注释 • 注释 • 单行注释 • 多行注释 • 文档注释 • 注意 • 多行注释不能嵌套 • 方法及类说明尽量采取文档注释,并标注相关内容 (@author,@see …) • 除了JDK1.5的标注Annotation外,注释不包括在编译后文件中
输入输出 • 输入输出 • Java 库提供了丰富的IO操作流包括如下: • 数据流 • 文本流 • 字符流 • Zip文件流 • 应用范围 • 文件管理 • 网络数据传输 • 对象序列反序列化 • 压缩解压等
流程控制 • 控制流程一 • 条件控制
流程控制 • 控制流程二 • 循环控制
流程控制 • 控制流程三 • 多重选择
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
大纲 ☞ • 对象构造顺序 • 方法参数传递:按值调用 • 类设计基本原则
对象构造顺序 • 对象构造顺序 • 类装载时,按类声明中出现的次序执行静态初始化块或静态初始化语句。 • 对象构造时: • 所有数据域初始化为默认值 • 按类声明中出现的次序执行初始化块或初始化语句。 • 如果构造器第一行调用了第二个构造器,则跳转到第二个构造器中执行,直到返回。 • 执行这个构造器的主体部分。 • 注点事项 • 对象构造器中显式调用另一构造器时,必须在对象构造器的第一行代码中。 • 当类声明中同时存在初始化语句与初始化域中,变量初始化的代码的次序至关重要。
大纲 • 对象构造顺序 • 方法参数传递:按值调用 • 类设计基本原则 ☞
方法参数传递:按值调用 • 一个方法不能修改一个基本数据类型的参数 • 一个方法可以改变一个对象参数的状态 • 一个方法不能让对象参数的引用到一个其它对象
大纲 • 对象构造顺序 • 方法参数传递:按值调用 • 类设计基本原则 ☞
类设计基本原则 • 类设计的基本原则 • 单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。 • 开放-封闭原则(OCP):一个类对于扩展时开放的,对于更改是封闭的。 • Liskov替换原则(LSP):子类必须能够替换掉它们的基类。 • 依赖倒置原则(DIP):高层模块不应该依赖于低层模块;抽象类不应该依赖于其细节,细节。 • 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法
类设计基本原则(续) • 包设计的基本原则 • 包内聚性原则(包粒度) • 重用发布等价原则(REP):重用的粒度就是发布的粒度。 • 共同重用原则(CRP):一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。 • 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其它的包不造成任何影响。 • 考虑可重用性与可开发性的平衡。 • 包耦合性原则(包稳定性) • 无环依赖原则(ADP):在包的依赖关系图中不允许存在环。 • 稳定依赖原则(SDP):朝着移定的方向进行依赖。不稳定性I=Ce/(Ca+Ce) • 稳定抽象原则(SAP):包的抽象程度应该与其稳定程度一致。抽象度A=Na/Nc
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
大纲 • 继承的介绍 • Java 继承的约束 • 继承的使用 • 继承与模式 • 反射 • 枚举
继承的介绍 • 继承是面向对象编程的一块基石 • 利用已存在的类,复用这些类的方法和域 • 利用继承,一些共性的特征可以抽象到超类,子类继承超类实现特有的属性 • Java 中所有的对象都继承至 java.lang.Object ,因此都拥有toString() , equals() ,wait() 等方法
继承的约束 • 不能实现多继承 • 父类提供了参数构造函数,子类必须实现 • 子类不能降低父类方法的可见域 • 子类不能抛出比父类构造函数或方法更多的异常 • 子类不能扩展父类的 final 方法
继承的使用 • 继承增加了重用代码,减少子类编码 • 把数据、行为和/或接口的共性尽可能地放到继承层次体系的高端 • 继承树的层次不能太深 • 复杂的继承树提高维护的复杂性 • 继承树的上层尽量为抽象层 • 可以提高系统间的松耦合 • 继承打破了对象的封装 • 子类可以访问父类的实现,父类的改动将会对子类产生影响 • 继承的动态绑定可以使程序灵活,更易于扩展 • 尽量减少定义域对子类可见(final 除外),减少数据被误写入危险,可提供读写方法功子类操作
继承与模式 • 模版模式
继承与模式 • 抽象工厂模式
继承与模式 • 适配器模式
继承与模式 • 策略模式
开发相关 • Java 中不允许多继承,但允许实现多个接口 • Java中,我们可以声明一个类扩展(extends)另一个类 ,继承的子类拥有访问超类的 protected 域的权限 ,并可以覆写已有方法或添加新的方法 • 继承使用应谨慎,不要滥用继承。
反射 • 允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,并可于运行时改变fields内容或唤起 methods。 • 可动态获取的内容包括 • modifiers(诸如public, static ) • superclass(例如Object) • interfaces(例如Cloneable • fields和methods等
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
大纲 ☞ • 接口与抽象类的选择 • 克隆及其注意事项 • 接口与回调 • 内部类、局部类、匿名类 • JDK的Proxy与CGLib的动态代理区别
接口与抽象类的选择 • 基本原则 • 正确、合理地理解领域本质与设计意图。 • 在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。 • 合理理解OCP原则、ISP原则 • 考虑因素 • 是否可能被多继承 • 是否有默认行为 • 行为集合是否已稳定 • “is a ”还是“like a”关系
大纲 • 接口与抽象类的选择 • 克隆及其注意事项 • 接口与回调 • 内部类、局部类、匿名类 • JDK的Proxy与CGLib的动态代理区别 ☞
克隆及其注意事项 • 浅克隆与深克隆 • 默认实现是浅克隆(本地方法实现)(java.util.AbstractMap默认实现是浅克隆) • 如果原始对象与浅克隆对象共享的子对象是不可变的,则不会产生负面问题。 • 采用序列化方法实现深度克隆,但不推荐。如com.kingdee.util. ObjectUtils.createCopy(Object o) • 注意事项 • 避免死循环 • 应用单例模式时,需注意屏蔽clone方法
大纲 • 接口与抽象类的选择 • 克隆及其注意事项 • 接口与回调 • 内部类、局部类、匿名类 • JDK的Proxy与CGLib的动态代理区别 ☞
接口与回调 • 回调实现方法 • 模板方法,如:BOS的Entity方法生成的代码。 • 注入方式,如:Observer设计模式 • 动态代理与拦截器方法 • 注意事项 • 合理利用接口,避免写僵硬、强藕合代码。 • 选用合适的回调实现方式,避免写侵入式代码。
大纲 • 接口与抽象类的选择 • 克隆及其注意事项 • 接口与回调 • 内部类、局部类、匿名类 • JDK的Proxy与CGLib的动态代理区别 ☞
内部类、局部类、匿名类 • 内部类 • 编译器会为非静态的内部类添加一个对外围类的隐式引用。 • 内部类是一种编译器现象,与虚拟机无关。 • 局部类 • 不能用可见性说明符进行声明。 • 可访问final类型的局部变量。运行时,虚拟机在方法参数变量释放之前对引用的局部变量进行备份。
大纲 • 接口与抽象类的选择 • 克隆及其注意事项 • 接口与回调 • 内部类、局部类、匿名类 • JDK的Proxy与CGLib的动态代理区别 ☞
JDK的Proxy与CGLib的动态代理区别 • JDK的Proxy • 只能实现基于接口的代理 • 一个代理类仅有一个调用处理器(InvoctionHandler)的实例变量 • 代理类仅覆盖Object类的toString/equals/hashCode方法,其它的方法没有重定义 • 对于特定的类加载器和给定的一组接口而言,只有一个代理类。 • 如果代理类实现的所有接口都是public,那代理类不属于特定的;否则,所有非公有的接口都必须属于同一个包,同时,代码类也属于这个包。 • 存在同签名方法时,接口的顺序至关重要。 • CGLib • 可以采用实现接口,或继承父类方式实现代理
目录 • 第1章 Java体系结构 • 第2章 基本程序结构设计 • 第3章 对象与类 • 第4章 继承 • 第5章 接口与内部类 • 第6章 事件处理 • 第7章 异常与调试 • 第8章 流与文件 ☞
事件处理 • 事件处理与 MVC • Model是代表组件状态和低级行为的部分,它管理着自己的状态并且处理所有对状态的操作 • View代表了管理model所含有的数据的一个视觉上的呈现。一个Model可以有一个以上的View • Controller管理着model和用户之间的交互的控制。它提供了一些方法去处理当model的状态发生了变化时的情况 • 运作时序 • 按钮 model 保存按钮的内部状态及行为 • 控制器在发生按钮点击事件后将事件给模型,模型根据行为更新内部状态。控制器通知视图改变按钮的显示 • 视图根据按钮的模型更新显示
事件处理 • 事件的继承模型
事件处理 • 组件的事件处理