首页 > 代码库 > 04 对象与类
04 对象与类
类是构建对象的模板或蓝图.
所以, 通常是, 一个TotalTest类含有main方法, 用来启动程序 等等, 剩下的其他类, 就好比C的 struct+method() 封装在一起.
类之间的关系:
依赖:( Uses-a), 应该尽量减少类之间的相互依赖, 如果类A不知道B的存在, 它就不会关心B的任何改变, 软件术语叫 耦合度小.
( 只是在一个类中使用了另外的类, 并不表示类A需要有实例变量是类B的类型 )
聚合: (has-a), 聚合关系意味着类A对象包含类B的对象.
继承:(is-a)
UML 图形表示:
接口继承: 并非是实现接口, 而是想类一样, 定义接口A, 再定义接口B, 然后让接口B extends A, 是这样的关系, 比如你定义了一个接口A, 后来发现接口A中得方法不够使用, 如果这时你增加方法的话, 那么以前你写的程序使用到这个接口的, 都需要修改, 因为java规定在实现接口时, 必须实现接口里的全部方法, 此时你就可以增加一个接口B extends A, 然后把想要新增加的方法放在接口B里.
关联和直接关联, 其实聚合也是关联的一种, 其实也没有必要把关系搞的那么清楚, 在UML途中, 最重要和常用的关系就是以上的几种关系.
多个源文件的编译
比如两个源文件, Employee.java 和 EmployeeTest.java, 有两种编译办法,
1. javac Employee*.java
2. javac EmployeeTest.java, 当java编译器发现 EmployeeTest.java使用了Employee类时会查找名为Employee.class文件, 如果没有找到, 就会自动搜索Employee.java并编译它, 更重要的是, 如果 Employee.java版本较已有得 Employee.class文件版本新, java编译器会重新编译Employee.java.
类似 unix 的 "make" 工具
包作用域
public : 公共访问
private : 私有的, 本身类里边可以访问
如果没有指定public, private的, 那么可以被同一个包中得所有方法访问. (一般很少使用, 都使public 或 private), 包作用域的方法和instance变量是可以被继承的.
类路径
1. 类存储在文件系统的子目录中(即 本机中) 类路径必须与包名匹配.
2. 类文件也可以存储在 JAR(JAVA归档)文件中, 很多第三方库文件就是使用这种, 在一个JAR文件中, 可以包含多个压缩形式的类文件和子目录.
为了使类能够被多个程序共享, 需要做到以下几点:
1) 把类放到一个目录中, 例如: /home/user/classdir, 需要注意的是, 这个目录是包 树状接口的基目录. 如果希望 com.horstman.corejava.Employee类添加到其中, 这个 Employee.class类文件就必须位于子目录 /home/user/classdir/com/horstman/corejava/ 中.
2) 将 JAR 文件放在一个目录中, 例如: /home/user/archives
3) 设置类路径 (class path), 类路径是所有包含类文件的路径的集合.
设置类路径
编译时, 可以通过设置 classpath 来制定类路径, java -classpath 路径 a.java
方法注释:
@param variable description
@return description
@throws class description
通用注释:
@authur name
@version text
@since text
@deprecated text ( 不再使用注释 )
@see reference
注释的抽取: eclipse 可以自动抽取, 也可以使用命令 javadoc -d 路径 包名
类设计技巧
1) 一定要将数据设计为 private
2) 一定要对数据初始化
3) 不要在类中使用过多的基本数据类型
4) 使用标准格式进行类的定义
书写顺序:
共有访问特性部分
包作用域访问特性部分
私有访问特性部分
在每一部分中, 应该按照下列顺序列出:
实例方法
静态方法
实例域
静态域
5) 将职责过多的类分解
6) 类名和方法名能够体现它们的职责