《面向对象技术与方法》Java语言基础.pdf_第1页
《面向对象技术与方法》Java语言基础.pdf_第2页
《面向对象技术与方法》Java语言基础.pdf_第3页
《面向对象技术与方法》Java语言基础.pdf_第4页
《面向对象技术与方法》Java语言基础.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2-1/69 Lecture Notes on Object-Oriented Programming / 存款余额 / 向帐户中存款,存款金额为amount public void deposit(double amount) balance = balance + amount; / 从帐户中取款,取款金额为amount public boolean withdraw(double amount) if (amount javac Account.java 运行例子程序一(第一种组织方式): java Account 2-19/69 编译例子程序一(第二种组织方式): javac Account.java Bank.java或 javac *.java 运行例子程序一(第二种组织方式): java Bank 注意以下命令会导致错误: java Account 2-20/69 编译并运行例子程序二: javac Hello.java java Hello 2-21/69 Java Virtual Machine(JVM) JVM定义了: 指令集(CPU) 寄存器集 类文件的格式 堆栈 垃圾收集堆 内存区域 2-22/69 Java Runtime Environment(JRE) JVM:装入代码校验代码执行代码 2-23/69 Java程序的调试 调试(debugging):程序员自己运行程序以发现、定 位和改正错误。 很大程度上依赖于程序员的技巧。 测试(testing):由程序员以外的专门小组检查程序是 否有错。 测试人员只负责检查程序是否有错,不必定位和改正错误。 ?测试只能证明程序有错,无法保证程序是正确的。 验证(verification):采用数学方法证明程序的正确 性,可保证程序是正确的。 正确性是一个相对的概念:规格说明 vs 实现。 规格说明必须形式化。 2-24/69 Java程序的错误 编译错误:漏掉行末的分号、括号不配对、混淆了分 号与逗号、标识符未声明、.(语法错误) 编译程序会发现并报告发现并报告所有的这类错误。 ?编译程序定位定位错误未必总是正确的! 运行错误:实际输出与预期输出不一致(逻辑错误) 区别:Fault (Bug)、Failure。一个Fault可能引起多个Failures。 2-25/69 集成化开发环境(IDE) IBMEclipse BorlandJBuilder SunNetBeans WebGainVisualCaf MicrosoftVisual J+ 2-26/69 Java程序的性能优化 原则:First make it work, then make it fast ! 执行性能优化前必须首先探明影响代码性能的瓶颈。 Profiling tools:网上搜索“java+optimi”或“java+profile”并下载试用版。 使用JDK 1.2开始提供的JVMPI (Java Virtual Machine Profiler Interface)接 口。 JVM自带的简单Profiler: java -Xrunhprof JDK 1.2 or later(生成 java.hprof.txt) java -prof JDK 1.x(生成f) java -Xprof with Suns HotSpot 2-27/69 性能分析例子 java -Xrunhprof:cpu=“samples“,thread=“y“ ProfileTest CPU SAMPLES BEGIN (total = 7) Wed Aug 28 13:54:10 2002 rank self accum count trace method 1 28.57% 28.57% 2 4 java.lang.FDBigInt.add 2 14.29% 42.86% 1 7 java.lang.FDBigInt.quoRemIteration 3 14.29% 57.14% 1 3 java.lang.FDBigInt.add 4 14.29% 71.43% 1 5 java.lang.FloatingDecimal.toJavaFormatString 5 14.29% 85.71% 1 6 java.lang.Long.toString 6 14.29% 100.00% 1 1 .URLStreamHandler.parseURL CPU SAMPLES END 有兴趣的同学请参考: /developer/onlineTraining/Programming/JDCBook/perf3.html 2-28/69 高级性能分析工具 Intuitive System: OptimizeIt! KL Group: JProbe ParaSoft: CodeWizard for Java/wizard PureIT AB: PureLoadhttp:/www.pureit.se/products/pureload Segue: SilkObserver IBM alphaWorks: SockPerf/tech/sml Compuware: TrueTime/DevPartner/numega/ Rational: Visual Quantify/products/vis_quantify/ 2-29/69 2.3 Java程序中的单词 原子性:单词是组成一个程序的最小单位。 “最小”意味着单词是语言中具有独立意义的最基本单位,在一个单词中不 可包含其他单词。 最长匹配原则:当一个符号串可能构成多个单词时,规 定可构成单词的最长串作为单词。 例如:“domain”应理解为一个完整的单词,而不是单词“do”接着单词 “main”。 编译程序的第一项任务(词法分析)就是将源程序划分 为一个个的单词序列。 词法规则定义工具:正规表达式、线性文法、有限自动机。 词法分析自动化工具:lex。 2-30/69 单词的分类 保留字:语言规定了固定意义的单词 标识符:程序员对程序中各种元素的命名 常量:其值在运行时不会改变的基本数据类型数据 运算符:在表达式中表示对数据执行某类运算 分界符:用于分隔特定的语法单位 2-31/69 Java语言的保留字 注意:Java语言是大小写敏感的! abstractdefaultifprivatethrow booleandoimplementsprotectedthrows breakdoubleimportpublictransient byteelseinstanceofreturntry caseextendsintshortvoid catchfinalinterfacestaticvolatile charfinallylongsuperwhile classfloatnativeswitch constfornewsynchronized continuegotopackagethis 保留,但未使用! 2-32/69 标识符命名 标识符 由字母、“_”或“$”开头的字母、数字、“_”或“$”组成的序列。 虽然可以用“$”开头,但建议不要如此使用! 虽然Java语言对标识符的长度没有约束,但编译器通常会加以约束,实际的 编程规范也应加以约束。 标识符命名原则 含义自明:选用能表达明确意义的英文单词命名。 规范缩写:采用规范的单词缩写形式。 规范分隔:采用规范的单词分隔形式。 2-33/69 标识符缩写风格 英文单词缩写可参考以下规则 单词首字母一定保留; 单词首部比尾部重要; 辅音字母比元音字母重要; 遵循英文缩写习惯,例如可用“2”表示“to”。 多阅读一些程序范例可帮助积累标识符命名的经验。 2-34/69 标识符分隔风格 如果一个标识符由多个单词组成,有两种流行的分隔方式: 单词之间以大写首字母分隔 例如CreditCard、selectMenu、isEmpty、. 单词之间以下划线分隔 例如CREDIT_CARD、select_menu、is_empty、. 两种都是好的程序设计风格,但在程序中应只选择其中一种。 2-35/69 善用程序中的空白 空白(blank) 空格(space)、制表符、回车、换行、注释统称为空白。 借助空白编写具有良好风格的程序 利用缩进、空行、注释等形式使程序版面的层次段落反映出程序的逻辑结 构,从而提高程序的可读性。 2-36/69 划分源程序的单词 代码1 if(average=60)isPassed = true; 代码2 / 判断平均成绩是否合格 if (average = 60) isPassed = true; 2-37/69 序号单 词类 别 1if保留字 2(分界符 3average标识符 4=运算符(关系运算) 560常量(整数类型) 6)分界符 7isPassed标识符 8=运算符(赋值运算) 9true保留字 10;分界符 2-38/69 Java程序设计指南 标识符命名 程序注释 程序版面 程序包组织 . . 2-39/69 标识符命名 标识符命名总则 程序中应采用有意义的标识符名字,让标识符含义自明含义自明。 尽量使用应用领域熟知的名词和术语,避免生造一些普通词汇。 避免使用近似的名字。 标识符采用英文单词命名,禁止使用汉语拼音或其缩写形式命名。 在一个对象的操作名字中不必重复出现对象的名字。 2-40/69 对象接口中的命名约定 接口、类、异常、对象实例、属性、符号常量等成份的标识符应选择 名词或名词短语,不宜采用动词或动名词短语。 利用一个形容词命名接口通常比一个名词更好。 尽管一个接口或类拥有多个对象实例,但其名字仍应为单数形式。 异常名通常采用否定形式,建议以Bad、Incomplete、Invalid、 Wrong、Missing或Illegal等词作为前缀,不宜机械套用Error、 Exception等含义不清的词。 对于返回布尔类型的方法通常采用is、has或can等前缀;其他方法宜 选择动词或动名词短语,不宜采用名词来命名。 如果属性的Getter和Setter方法可在问题域中找到与对象建模相对应的 实体自然映射,则应采用这种更自然、更易理解的命名采用这种更自然、更易理解的命名。 2-41/69 对象实现中的命名约定 形式参数名采用与局部变量相同的命名约定。避免形式参数名与属性 名相同:既可为形式参数名前缀“a”或“an”,也可将重名的形式参数采 用缩写形式。 对于描述一组对象的集合属性或局部变量(例如类型为数组、 Vector、HashTable、Enumeration等),用英文复数形式命名其标识 符。 布尔型属性或局部变量的标识符通常采用is、has或can等前缀;且这 些标识符应使用肯定形式的判定句式,不要使用其否定形式。 简单循环的计数器可命名为i、j、k、ptr、index或counter;复杂循环 的计数器应采用问题域中对应的名字作为标识符。 习惯将输入流局部变量命名为in、输出流为out、I/O流为inOut。 习惯将异常对象实例命名为exc。 图形用户界面控件命名为控件含义后缀控件类型,控件类型与该控件 的类名相同。 2-42/69 标识符大小写约定 属于类型范畴的接口、类、异常等名字以大写开头;属于实例范畴 的对象实例、对象属性、形式参数、局部变量等名字以及属于操作 范畴的方法名等均以小写开头;程序包名字以小写开头。 如果一个标识符由两个或多个英文单词组成,则单词之间以首字母 大写进行分隔,而不使用下划线连接。 符号常量采用特殊的大小写与单词分隔约定:符号常量名采用全部 大写的标识符,两个单词之间以下划线连接。 2-43/69 单词缩写约定 总则:程序成份的作用域越大,则越应采用完整的单词程序成份的作用域越大,则越应采用完整的单词;仅当该成 份的作用域局限于程序员自己控制范围时,才宜采用缩写形式。 一个对象公开给其他组件的接口、类、方法、对象实例、属性等均 应避免使用缩写,除非该单词本身冗长且有约定俗成的简写。 仅在一个对象实现的内部对过长的单词采用缩写,从而将这些缩写 的涉及范围约束在一个较小的名字空间中。 需要缩写单词时,遵循以下原则以提高标识符的可读性: 保留单 词的首字母(注意ex前缀的单词常转换为x开头); 单词的首部比 尾部重要; 单词中的辅音字母比元音字母重要; 遵循英文单词 的缩写习惯。 2-44/69 标识符长度 各类标识符长度应控制在24个字符之内。 如果个别难以表述的标识符确实需要更大的长度,禁止超过36个字 符。 2-45/69 程序注释 程序注释总则 程序员编写程序时,先编写注释、后编写代码;程序员修改程序 时,也是先修改注释、再修改代码。 注释不仅仅是只列出相应代码执行的功能,而且还应给出为什么如 此编写代码的原因或理由。 注释以清晰、实用为目的,避免广告横幅那样的装饰性注释风格。 如果在具体应用问题中本指南约定的注释条目内容为空,则该注释 条目的整行都不应出现;不要只留下一些空的注释标题。 注释条目关键字为复数形式表示该条目可列多个项,各个项之间以 逗号分隔。 2-46/69 程序注释约定 程序注释采用的语言:对于用户界面为中文或支持多国语言的软件 产品,程序中的注释采用中文书写;否则采用英文书写。 程序注释采用的形式:程序逻辑的注解说明均采用以“/”前缀的行 尾注释风格;注释符号“/* . */”仅限用于临时隐藏无用代码,此时 应注明隐藏代码的时间、作者和原因。 注释中的日期书写格式:采用ANSI格式“yyyy.mm.dd”,其中yyyy、 mm和dd分别为年、月、日(注意年份全部采用4位数字)。 注释中的版本号书写格式:包括小数点分开的整数部分与小数部 分,整数部分表示版本编号,两位小数部分表示该版本的修订编 号。 注释中的断言书写格式:每一断言可独占一行,不同行之间断言的 关系是“与”关系。命名断言的形式为“断言名字 - 断言”。断言本身 尽量以类似程序设计语言逻辑表达式的形式化方法进行说明,其中 可以使用约束关键字OLD、NOCHANGE和RESULT。 2-47/69 关于程序注释的其他规则: 程序包的注释 Java接口的注释 Java类的注释 . . 2-48/69 程序版面 缩进与分隔符 全部采用制表符缩进,不采用固定数目的空格表示缩进。 两个单词(保留字、标识符)之间以一个空格作分隔。 所有单目操作符(不论前缀还是后缀)与其操作数之间不分隔。 所有双目操作符与其左、右操作数之间都以一个空格作分隔。 各种括号(包括圆括号、方括号、尖括号等)与其括号中的内容 不分隔。 除括号之外的标点符号与左边标识符不分隔,与右边标识符以一 个空格作分隔。 2-49/69 关于程序版面的其他规则: Java接口的版面 Java类的版面 Java语句的版面 . . 2-50/69 Sun公司建议的Java编码习惯 /docs/codeconv/ 2-51/69 2.4 Java程序的文档化注释 Java提供三种注释风格 C语言原有:/* . */ C+语言新添:/ . Java语言新添:/* . */,称为文档化注释。 指导思想:将文档与程序放在同一位置容易管理。 javadoc生成HTML格式的文档 Sun公司提供的Java API文档即由javadoc生成。 缺省时只生成public和protected成员的文档, 除非加上命令行参数-private。 2-52/69 两种使用方式 使用HTML标记 . . . . . 使用javadoc标记 see .param . version .author . return .exception . 2-53/69 三种注释内容 类或接口注释 刚好出现在一个类的定义之前。 数据成员注释 刚好出现在一个数据成员的定义之前。 方法成员注释 刚好出现在一个方法成员的定义之前。 /* A class comment */ public class Test /* A variable comment */ public int i; /* A method comment */ public void f() . 2-54/69 类或接口注释 see:将交叉参考转换为HTML的链接。 see qualifiedclass_name see qualifiedclass_name#method_name version:列出类或接口的版本号。 version version_information author:列出作者的姓名,该项可连续出现多次。 author author_name 命令行参数: javadoc -author -version ClassName 2-55/69 数据成员注释 see:将交叉参考转换为HTML的链接(同上)。 2-56/69 方法成员注释 see:将交叉参考转换为HTML的链接(同上)。 param:描述方法的参数,该项可连续出现多次。 param parameter_name parameter_description return:描述方法的返回值。 return returned_value_description throws:描述方法抛出的异常(转换为HTML链接), 可连续出现多次。 throws exception_class_name exception_description deprecated:指明方法是过期的。 2-57/69 /*银行帐户的模型,演示面向对象程序的用法。 * author李文军 * version1.01 * seeexamples.Bank#main */ public class Account private double balance = 0; / 存款余额 /*向帐户中存款 * paramamount存款金额 */ public void deposit(double amount) balance = balance + amount; /*从帐户中取款 * paramamount取款金额 * return取款成功返回true,否则返回false。 */ public boolean withdraw(double amount) . /*查询帐户的当前余额 * return帐户的当前余额。 */ public double getBalance() . 2-58/69 进一步探讨javadoc工具 不足:缺乏灵活性或可扩展性。 程序员无法根据本软件企业的需要定制注释项目。 对中文注释的处理尚欠统一与美观。 只能算是文档化注释的入门级工具。 启发:软件企业应开发适合本企业特色的文档化软件 工具。 可借鉴javadoc工具的思路。 任何对语言(源程序)进行处理的软件工具都具有相当的开发难度。 2-59/69 2.5 阅读JDK源程序代码 两种获取方式 随J2SDK下载,或单独下载。 解压并阅读 解压:安装j2sdk后解压文件src.zip。 目的:对Java API文档的补充;学习好的程序设计风格。 只有Java API的公有类,不含sun.*的类 其实还算不上是开源的(open source)。 2-60/69 2.6 Java语言的主要特点 语言渊源 语法:主要源于C+ 语义:主要源于Smalltalk-80 其他:Eiffel、Ada、Objective-C 2-61/69 两种应用程序 Graphic User Interface (GUI) Application Command Line Applet 2-62/69 先进性 较纯的面向对象程序设计语言 较纯是相对于C+语言而言,但还不是纯的面向对象程序设计语言。 非面向对象的基本类型数据都有相应的包装类(wrapper)。 结合编译与解释的混合型执行方式 解释型:虽不利于软件的执行效率,但提高了软件开发的效率。(总成 本!) 中间码:比纯解释型语言提高了解释执行的效率,且提高了代码的可移植 性。 性能通过优化的虚拟机不断提高 JIT、HotSpot、. JVM既可以是软件,也可以设计为硬件(特别是在移动设备或家电产品 上)。 在语言级支持多线程 2-63/69 平台无关性 平台:硬件、操作系统、网络系统 提高了应用程序的可移植性。 采用中间语言与虚拟机 Java:字节码(bytecode)JVM。 Microsoft .Net:MSIL(Microsoft Intermediary Language)CLR (Common Language Runtime)。 Write once, run anywhere. 但仍无法实现“独立于程序设计语言”! 2-64/69 垃圾自动回收 自动检测并释放不再需要的内存空间 由系统自动完成(而不是程序完成) Java语言提供了一个系统级线程跟踪内存的分配情况 2-65/69 代码安全性 主要指Applet应用 Applet运行在一个沙盒(sandbox)中。 JVM的任务 (1) 装入代码:装入执行一个程序时所需的所有类;在本地文件系统的不同 名字空间维护类;避免受到欺骗。 (2) 校验代码:符合JVM规范;不会破坏系统完整性;不会引起栈溢出;参 数类型的正确性;无非法数据转换(例如整数转为指针)。 (3) 执行代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论