版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,Java开发基础,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,Java体系结构,Java体系结构包括如下四大类技术: Java程序设计语言 Java class文件格式 Java API Java 虚拟机,Java体系结构(续),目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,大纲,数据类型 变量 运算符 字符串 注释 输入输出 控制流程 数组,数据类
2、型,数据类型 整型 浮点型 char型 boolean型,Char :长度 2字节无符号整型 0 65535 Boolean:true 、 false,数据类型,数据类型操作注意事项 尽量使用适合长度的数据类型操作 尽量使用约定俗成的数据类型做常用操作 注意数据操作时可能发生的数据溢出及除0错误 进行金额操作时避免使用float 和 double,使用无损精度操作的大数值类型 BigInteger 和 BigDecimal,变量,变量 初始化变量 常量 注意 定义变量时尽量赋予初始化值 变量的命名要简明达意 遵守变量命名的大小写规范 使用合适的描述符,尽可能在使用变量时定义,减小可见性,运算符
3、,运算符 算术运算符 自增自减运算符 关系运算符与boolean运算符 位运算符 运算相关注意事项 使用JDK库实现常用算法及函数 数值类型的自动转换规则 强制类型转换及截位 枚举类型的使用,字符串,字符串 代码点与代码单元 字符子串与拼接 相等的比较 注意事项 编码转换方法 子串下标计算 拼接的性能 String 方法 intern() 的应用,注释,注释 单行注释 多行注释 文档注释 注意 多行注释不能嵌套 方法及类说明尽量采取文档注释,并标注相关内容 (author,see ) 除了JDK1.5的标注Annotation外,注释不包括在编译后文件中,输入输出,输入输出 Java 库提供了
4、丰富的IO操作流包括如下: 数据流 文本流 字符流 Zip文件流 应用范围 文件管理 网络数据传输 对象序列反序列化 压缩解压等,流程控制,控制流程一 条件控制,流程控制,控制流程二 循环控制,流程控制,控制流程三 多重选择,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,大纲,对象构造顺序 方法参数传递:按值调用 类设计基本原则,对象构造顺序,对象构造顺序 类装载时,按类声明中出现的次序执行静态初始化块或静态初始化语句。 对象构造时: 所有数据域初始化为默认值 按类声明中出
5、现的次序执行初始化块或初始化语句。 如果构造器第一行调用了第二个构造器,则跳转到第二个构造器中执行,直到返回。 执行这个构造器的主体部分。 注点事项 对象构造器中显式调用另一构造器时,必须在对象构造器的第一行代码中。 当类声明中同时存在初始化语句与初始化域中,变量初始化的代码的次序至关重要。,大纲,对象构造顺序 方法参数传递:按值调用 类设计基本原则,方法参数传递:按值调用,一个方法不能修改一个基本数据类型的参数 一个方法可以改变一个对象参数的状态 一个方法不能让对象参数的引用到一个其它对象,大纲,对象构造顺序 方法参数传递:按值调用 类设计基本原则,类设计基本原则,类设计的基本原则 单一职责
6、原则(SRP):一个类应该仅有一个引起它变化的原因。 开放-封闭原则(OCP):一个类对于扩展时开放的,对于更改是封闭的。 Liskov替换原则(LSP):子类必须能够替换掉它们的基类。 依赖倒置原则(DIP):高层模块不应该依赖于低层模块;抽象类不应该依赖于其细节,细节。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法,类设计基本原则(续),包设计的基本原则 包内聚性原则(包粒度) 重用发布等价原则(REP):重用的粒度就是发布的粒度。 共同重用原则(CRP):一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。 共同封闭原则(CCP):包中的所有
7、类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其它的包不造成任何影响。 考虑可重用性与可开发性的平衡。 包耦合性原则(包稳定性) 无环依赖原则(ADP):在包的依赖关系图中不允许存在环。 稳定依赖原则(SDP):朝着移定的方向进行依赖。不稳定性I=Ce/(Ca+Ce) 稳定抽象原则(SAP):包的抽象程度应该与其稳定程度一致。抽象度A=Na/Nc,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,大纲,继承的介绍 Jav
8、a 继承的约束 继承的使用 继承与模式 反射 枚举,继承的介绍,继承是面向对象编程的一块基石 利用已存在的类,复用这些类的方法和域 利用继承,一些共性的特征可以抽象到超类,子类继承超类实现特有的属性 Java 中所有的对象都继承至 java.lang.Object ,因此都拥有toString() , equals() ,wait() 等方法,继承的约束,不能实现多继承 父类提供了参数构造函数,子类必须实现 子类不能降低父类方法的可见域 子类不能抛出比父类构造函数或方法更多的异常 子类不能扩展父类的 final 方法,继承的使用,继承增加了重用代码,减少子类编码 把数据、行为和/或接口的共性尽
9、可能地放到继承层次体系的高端 继承树的层次不能太深 复杂的继承树提高维护的复杂性 继承树的上层尽量为抽象层 可以提高系统间的松耦合 继承打破了对象的封装 子类可以访问父类的实现,父类的改动将会对子类产生影响 继承的动态绑定可以使程序灵活,更易于扩展 尽量减少定义域对子类可见(final 除外),减少数据被误写入危险,可提供读写方法功子类操作,继承与模式,模版模式,继承与模式,抽象工厂模式,继承与模式,适配器模式,继承与模式,策略模式,开发相关,Java 中不允许多继承,但允许实现多个接口 Java中,我们可以声明一个类扩展(extends)另一个类 ,继承的子类拥有访问超类的 protecte
10、d 域的权限 ,并可以覆写已有方法或添加新的方法 继承使用应谨慎,不要滥用继承。,反射,允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,并可于运行时改变fields内容或唤起 methods。 可动态获取的内容包括 modifiers(诸如public, static ) superclass(例如Object) interfaces(例如Cloneable fields和methods等,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流
11、与文件,大纲,接口与抽象类的选择 克隆及其注意事项 接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别,接口与抽象类的选择,基本原则 正确、合理地理解领域本质与设计意图。 在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。 合理理解OCP原则、ISP原则 考虑因素 是否可能被多继承 是否有默认行为 行为集合是否已稳定 “is a ”还是“like a”关系,大纲,接口与抽象类的选择 克隆及其注意事项 接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别,克隆及其注意事项,浅克隆与深克隆 默认实现是浅
12、克隆(本地方法实现)(java.util.AbstractMap默认实现是浅克隆) 如果原始对象与浅克隆对象共享的子对象是不可变的,则不会产生负面问题。 采用序列化方法实现深度克隆,但不推荐。如com.kingdee.util. ObjectUtils.createCopy(Object o) 注意事项 避免死循环 应用单例模式时,需注意屏蔽clone方法,大纲,接口与抽象类的选择 克隆及其注意事项 接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别,接口与回调,回调实现方法 模板方法,如:BOS的Entity方法生成的代码。 注入方式,如:Observer设计模
13、式 动态代理与拦截器方法 注意事项 合理利用接口,避免写僵硬、强藕合代码。 选用合适的回调实现方式,避免写侵入式代码。,大纲,接口与抽象类的选择 克隆及其注意事项 接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别,内部类、局部类、匿名类,内部类 编译器会为非静态的内部类添加一个对外围类的隐式引用。 内部类是一种编译器现象,与虚拟机无关。 局部类 不能用可见性说明符进行声明。 可访问final类型的局部变量。运行时,虚拟机在方法参数变量释放之前对引用的局部变量进行备份。,大纲,接口与抽象类的选择 克隆及其注意事项 接口与回调 内部类、局部类、匿名类 JDK的Pro
14、xy与CGLib的动态代理区别,JDK的Proxy与CGLib的动态代理区别,JDK的Proxy 只能实现基于接口的代理 一个代理类仅有一个调用处理器(InvoctionHandler)的实例变量 代理类仅覆盖Object类的toString/equals/hashCode方法,其它的方法没有重定义 对于特定的类加载器和给定的一组接口而言,只有一个代理类。 如果代理类实现的所有接口都是public,那代理类不属于特定的;否则,所有非公有的接口都必须属于同一个包,同时,代码类也属于这个包。 存在同签名方法时,接口的顺序至关重要。 CGLib 可以采用实现接口,或继承父类方式实现代理,目录,第1章
15、 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,事件处理,事件处理与 MVC Model是代表组件状态和低级行为的部分,它管理着自己的状态并且处理所有对状态的操作 View代表了管理model所含有的数据的一个视觉上的呈现。一个Model可以有一个以上的View Controller管理着model和用户之间的交互的控制。它提供了一些方法去处理当model的状态发生了变化时的情况 运作时序 按钮 model 保存按钮的内部状态及行为 控制器在发生按钮点击事件后将事件给模型,模型根据行为更
16、新内部状态。控制器通知视图改变按钮的显示 视图根据按钮的模型更新显示,事件处理,事件的继承模型,事件处理,组件的事件处理,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件,大纲,Error与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,Error与Exception区别,Error Error类
17、层次结构描述了Java运行时系统的内部错误和资源耗尽错误。 Exception RuntimeException:由程序错误导致的异常 Checked Exception:某些情况下可正确运行,而在某些情况下导致的异常 Checked Exception的审查是编译器行为 出现RuntimeException问题,一定是你的问题,Error与Exception区别,常见Error 常见RuntimeException ClassCastException, IllegalArgumentException, ArrayIndexOutOfBoundsException, StringIndex
18、OutOfBoundsException, MissingResourceException, NoSuchElementException, NullPointerException,Error与Exception区别,疑难Error/Exception ClassNotFoundException 显式类装载失败 NoClassDefFoundError 隐式类装载失败,或初始化失败后置脏 UnsatisfiedLinkError 对于声明为 native 的方法,JVM找不到和它对应的本机语言定义 在Windows系列OS中,多次加载dll。 ExceptionInInitializer
19、Error 如果初始化器突然完成,抛出一些异常 E,而且 E 的类不是 Error 或者它的某个子类,那么就会创建ExceptionInInitializerError 类的一个新实例,并用 E 作为参数,用这个实例代替 E。 ClassCircularityError 类或接口由于是自己的超类或超接口而不能被装入。,大纲,Error与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,Exception处理基本原则
20、,基本原则 敏感资源的释放、或备份上下文环境后的现场恢复,要在finally子句中完成。 不要轻易吞并/压制异常 处理异常时,先测特定异常,后测通用异常 检测错误时,”苛刻”要比放任更好 早抛出,晚捕获,大纲,Error与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,StackOverflowError,StackOverflowError 解读:栈溢出,程序所需的栈空间大于为JVM所配置的栈空间 引发原因 程
21、序死循环 过深的方法调用,特别是递归调用 JIT编译后代码的问题 解决办法: 检查程序是否存在死循环 通过-Xss, -Xoss参数为JVM配置栈空间 -Xoss参数供本地调用线程栈所用,即供Java代码调用本地库时的过程调用,如:IBM JDK默认-Xoss值为512k,用法如-Xoss512k -Xss参数供Java线程栈所用,即用于Java方法调用时追踪变量的状态,如: IBM JDK默认-Xss值为400k,用法如-Xss400k,OutOfMemoryError,OutOfMemoryError 解读:堆空间不足,JVM不能够继续为程序分配对象所需的椎空间,并且没有其它的内存空间供垃
22、圾回收器回收。 引发原因 JVM堆空间分配不足 程序存在”内存泄漏” 解决办法: 通过-Xms, -Xmx参数为JVM配置Java堆空间 审查程序中可能存在的”内存泄漏”,重点是Map,Collection等变量所钩住本该回收的对象。 合理利用WeakReference, SoftReference,大纲,Error与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,Debug基本技巧以及如何在Eclipse进行调
23、试,Debug基本技巧 -verbose启动JVM,观察类加载过程:检查类路径设置是否正确 使用断言。 以Debug级别记录日志 -Xdebug参数启动JVM进行远程调试,如: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 JDK5.0中Dcom.sun.management.jmxremote选项启用JVM,然后用JConsole工具观察内存消耗、线程使用、类加载等情况,Debug基本技巧以及如何在Eclipse进行调试,如何在Eclipse进行调试,Debug基本技巧以及如何在Eclipse进行调
24、试,如何在Eclipse进行调试 察看”变量”视图中的内容 在”断点”视图中设置某一类Exception的断点 在”表达式”视图中增加要观察的表达式 为”断点”设置属性 可在”显示”视图中对当前上下文的内容进行评估 充分利用”剪贴薄”(或”草稿纸”)功能,对无法确定的用法或内容进行试算或尝试,大纲,Error与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,Logger使用注意事项,Logger类型 JDK Lo
25、gger 日志记录器分成7级:SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST Log4j 日志记录器分成5级FATAL, ERROR, WARNING, INFO, DEBUG 注意事项 (log4j)logger.debug(arg1)一类,应加上 if (log.isDebugEnable() 之类的判断,以免在运行不必要得计算 arg1 (log4j)要完整地记录下异常链,如应用logger.error(“error”,e)方式 用System.out方式进行调试的,应在发布前屏蔽 配置log4j参数时,记录级别要合理,大纲,Erro
26、r与Exception区别 Exception处理基本原则 StackOverflowError与OutOfMemoryError Debug基本技巧以及如何在Eclipse进行调试 Logger使用注意事项 Assert使用注意事项,Assert使用注意事项,注意事项 断言失败是致命的、不可恢复的错误 断言检查只用于开发和测试阶段 启用或禁用断言是类装载器的功能 不要在断言中修改变量的值 断言只是测试和调试阶段使用的战术性工具,目录,第1章 Java体系结构 第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件
27、,大纲,InputStream/OutputStream注意事项 NIO 对象序列化与外部化,InputStream/OutputStream注意事项,注意事项 不论是read方法还是write方法都是线程阻塞模型 及时关闭流对象,以释放操作系统资源 对于输出流,在不关闭文件时,如果不刷新(flush)输出流占用的缓存区,则可能最后一个字节包永远不会被送出 在Java中,所有数据文件都按高字节前存的方法存储 StringBuilder是线程不安全的。 流类关注的是文件内容,而File类关注的是文件在磁盘上的存储,大纲,InputStream/OutputStream注意事项 NIO 对象序列化
28、与外部化,NIO,NIO支持的特性 内存映射文件 为文件获取通道(channel)。通道是对于磁盘文件的抽象,允许访问操作系统的特性,如文件间的内存映射、文件锁定和快速数据传输 通过FileChannel类的map方法获得MappedByteBuffer.(有只读、读写、私有三种映射模式) 文件锁定 通过FileChannel的lock、trylock获得共享锁或排他锁 文件锁的具体实现依赖于操作系统 文件锁是整于JVM持有 字符集编码和解码 非阻塞IO,NIO,Buffer数据结构,大纲,InputStream/OutputStream注意事项 NIO 对象序列化与外部化,对象序列化与外部化
29、,注意事项 对象序列化采用了是一种特殊文件格式存储对象 不建议使用对象序列化来实现对象的持久化 序列化 对象序列化时,既保存对象的状态,也保存类的描述信息:类名、serialVersionUID、非私有的方法标志信息、非transient的数据域(不区分可见性) 序列化时,保存的类描述直到实现Serializable接口的父类为止 重载对象状态的序列化过程: private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInput
30、Stream in) throws IOException, ClassNotFoundException; ObjectOutputStream.defaultWriteObject 方法序列化对象的状态,不区分子类或父类的数据域。仅包含实现Serializable接口的类其及子类 不实现Serializable接口的父类必须有一个子类可访问到的无参构造方法。否则运行时抛InvalidClassException,对象序列化与外部化,序列化 拦截序列化对象: 拦截参与序列化的对象: ANY-ACCESS-MODIFIER Object writeReplace() throws ObjectStreamException; 重解析反序列化的对象,用途如:可序列化的唯一实例、枚举等。 ANY-ACCESS-MODIFIER Obj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 奇妙的静电现象作文课件
- 数字化赋能:鞍山市政府集中采购管理系统的创新构建与实践
- 数字化赋能:瑞安市政府投资项目管理系统的构建与实践
- 数字化赋能:南京市青少年校园足球信息平台创新设计与实践
- 数字化赋能:中国农业发展银行柜员绩效量化考核系统的构建与实践
- 设备监理师设备工程监理基础及相关知识测测试题及答案
- 数字化浪潮下虚拟品牌社区的构建与进阶策略研究
- 数字化浪潮下NF公司开放式基金在线营销战略的创新与突破
- 雷雨教学课件
- 2025年前台销售礼仪试卷
- 《做个诚实的孩子》课件
- 2022年绍兴市越城区事业单位考试《医学基础知识》试题
- 部编版小升初语文专项复习课件
- 风险监控指标汇总表
- 学校宿舍楼维修改造工程投标方案(完整技术标)
- 江苏师范大学成人继续教育网络课程《英语》单元测试及参考答案
- 小学科学教学经验交流课件
- 中考数学-隐藏的圆(图片版)课件
- 《风景园林专业概论》课程教学大纲
- 公司环保考核细则
- 生态学基础课件-第三章种群生态学
评论
0/150
提交评论