第5章 aVa规 Touuspspuaip
第 5 章 对象设计的Java规范
主要内容 5.1好程序的基本条件 5.2Java语言的 Object类及标准包 java. lang包 5.2.3Java标准包 5.3]ava的异常处理机制 5.3.1异常处理 5.3.2核心代码与异常处理分离机制 5.3.3引发异常及对异常处理的两条途径 5.3.4Java的内置异常类 5.3.5设计异常类 5.3.6断言语句 5.3.7对异常不作为与作为的区别 5.4包、接口、类与方法设计 5.4.1包设计 5.4.2制作AR文件包 5.4.3接口设计 5.4.4抽象类设计 5.4.5类设计 5.4.6方法设计 5.5Java编码的其它规范 5.5.1命名规范 文件组织样式 3增加程序可读性的一些建议 5.5.4完整的例子 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 2 主要内容 ◼ 5.1 好程序的基本条件 ◼ 5.2 Java语言的Object类及标准包 • 5.2.1 Object类 • 5.2.2 java.lang包 • 5.2.3 Java标准包 ◼ 5.3 Java的异常处理机制 • 5.3.1 异常处理 • 5.3.2 核心代码与异常处理分离机制 • 5.3.3 引发异常及对异常处理的两条途径 • 5.3.4 Java的内置异常类 • 5.3.5 设计异常类 • 5.3.6 断言语句 • 5.3.7 对异常不作为与作为的区别 ◼ 5.4 包、接口、类与方法设计 • 5.4.1 包设计 • 5.4.2 制作JAR文件包 • 5.4.3 接口设计 • 5.4.4 抽象类设计 • 5.4.5 类设计 • 5.4.6 方法设计 ◼ 5.5 Java编码的其它规范 • 5.5.1 命名规范 • 5.5.2 文件组织样式 • 5.5.3 增加程序可读性的一些建议 • 5.5.4 完整的例子
5.1好程序的基本条件
5.1 好程序的基本条件
程序可读性强的重要性 软件维护所占的成本约为一个软件生命周 期中总成本的80%。 任何一个软件的维护工作都不可能始终由 最初的编程人员来执 ■编程规范提高了软件的可读性,使工程师 更快更彻底地读懂新的源代码 ■如果我们的源代码是作为商品而开发的, 我们必须保证相关源代码可以与其它商品 清晰分开,并进行合理的打包 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 4 程序可读性强的重要性 ◼ 软件维护所占的成本约为一个软件生命周 期中总成本的80%。 ◼ 任何一个软件的维护工作都不可能始终由 最初的编程人员来执行。 ◼ 编程规范提高了软件的可读性,使工程师 更快更彻底地读懂新的源代码。 ◼ 如果我们的源代码是作为商品而开发的, 我们必须保证相关源代码可以与其它商品 清晰分开,并进行合理的打包
些良好的编程习惯 致命的异常终止决不允许 条错误信息应该报告什么发生了,关于这个用 够做什么,程序下一步要做什么,以及哪 码造成该问题?可能也要注意时间,用户名 和环境。 ■好的程序将自动地发送最近的错误信息给永久性 媒体 1以这个次序编写:用户手册→说明书→帮助→源 ■编码工作量应该不超过开发工作的20% 测试应该至少要占工程的30% 注释应该至少要占源代码的20% 2021/2/20 ava面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 5 一些良好的编程习惯 ◼ 致命的异常终止决不允许 ◼ 一条错误信息应该报告什么发生了,关于这个用 户能够做什么,程序下一步要做什么,以及哪一 行代码造成该问题?可能也要注意时间,用户名 和环境。 ◼ 好的程序将自动地发送最近的错误信息给永久性 媒体 ◼ 以这个次序编写:用户手册→说明书→帮助→源 代码 ◼ 编码工作量应该不超过开发工作的20% ◼ 测试应该至少要占工程的30% ◼ 注释应该至少要占源代码的20%
些良好的编程习惯 ■带有清晰的变量名和实例名的文档代码 数据库应该是相关的 让简单的维护成为引导我们的灯光 ■总是采用最好的算法 ■永远不要隐藏一个我们仅用一次的实例,将其嵌 入到源代码中,然后,如果我们要多次使用一个 实例,则应将其变成一个方法调用 首先编写更具有风险的模块 首先优化最慢的模块 遵守30秒规则 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 6 一些良好的编程习惯 ◼ 带有清晰的变量名和实例名的文档代码 ◼ 数据库应该是相关的 ◼ 让简单的维护成为引导我们的灯光 ◼ 总是采用最好的算法 ◼ 永远不要隐藏一个我们仅用一次的实例,将其嵌 入到源代码中,然后,如果我们要多次使用一个 实例,则应将其变成一个方法调用。 ◼ 首先编写更具有风险的模块 ◼ 首先优化最慢的模块 ◼ 遵守30秒规则
5.2Java语言的 Object:类及标准包
5.2 Java语言的Object类及标准包
Java语言的 Object类 a Object类是类层次的根。 所有类都直接或间接地继承了 object类, 所以一个 object类型的变量可以引用任在 对象,不论是类实例还是数组。 object类定义了11个可供所有对象继承的 方法。这些方法分为两类:通用工具方法 和支持线程的方法。 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 8 Java语言的Object类 ◼ Object类是类层次的根。 ◼ 所有类都直接或间接地继承了Object类, 所以一个Object类型的变量可以引用任何 对象,不论是类实例还是数组。 ◼ Object类定义了11个可供所有对象继承的 方法。这些方法分为两类:通用工具方法 和支持线程的方法
Object类的工具方法 public boolean equals(object obj) public int hash Code( protected Object clone throws CloneNotsupported Exception public final class getclass( protected void finalize throws Throwable public String toString( oublic final void wait(long timeout) throws Interrupted Exception public final void wait(long timeout, int nanos) throws InterruptedException public final void waito throws Interrupted Exception public final void notify public final void notifyAllo 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 9 Object类的工具方法 ◼ public boolean equals(Object obj) ◼ public int hashCode() ◼ protected Object clone() throws CloneNotSupportedException ◼ public final Class getClass() ◼ protected void finalize() throws Throwable ◼ public String toString() ◼ public final void wait(long timeout) throws InterruptedException ◼ public final void wait(long timeout, int nanos) throws InterruptedException ◼ public final void wait() throws InterruptedException ◼ public final void notify() ◼ public final void notifyAll()
Object类中 equals方法的性质 反身性( Reflexive)对于任何引用x, X, equals(x)将 返回true。 对称性( Symmetric)对于引用x和y,当且仅当 y equals()返回true时, X, equals(y)才会返回true ■传递性( Transitive)对于引用、y和z,如果 , equals(y)返回true,y. equals(z)也返回true,那么 . equals(z)也将返回true。 致性( Consistent)对于引用x和y,只要对象比较时 所有的信息并没有做任何的改动,那么多次调用 equals(y)要么都返回true,要么都返回 false。 对于任何非空引用(non- null reference)x, equals(nu)将返回 False 2021/2/20 java面向对象程序设计教程
2021/2/20 Java面向对象程序设计教程 10 Object类中equals方法的性质 ◼ 反身性(Reflexive) 对于任何引用x,x.equals(x) 将 返回true。 ◼ 对称性(Symmetric) 对于引用x和y,当且仅当 y.equals(x) 返回true时,x.equals(y)才会返回true。 ◼ 传递性(Transitive) 对于引用x、y和z,如果 x.equals(y)返回true,y.equals(z)也返回true,那么 x.equals(z)也将返回true。 ◼ 一致性(Consistent) 对于引用x和y,只要对象比较时 所有的信息并没有做任何的改动,那么多次调用 x.equals(y)要么都返回true,要么都返回false。 ◼ 对于任何非空引用(non-null reference)x, x.equals(null)将返回false