Java核心技术卷一:对象和类
类之间的关系
- 依赖(“uses-a”):依赖意味着耦合,应该尽量减少依赖
- 聚合(“has-a”)
- 继承(“is-a”)
使用预定义类
Date类:表示时间点的Date类
LocalDate类:表示大家都熟悉的日历表示法
静态域与静态方法
在下面两种情况下使用静态方法:
- 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供
- 一个方法只需要访问类的静态域
方法参数
**按值调用:**表示方法接收的是调用者提供的值
按引用调用:表示方法接收的是调用者提供的变量地址
Java中都是按值调用,也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容
对象构造
重载的方式:
- 参数的个数
- 参数的顺序
- 参数的类型
默认构造器:仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器
初始化块:
- 只要构造类的对下,初始化块就会被执行
- 先执行初始化块,再执行构造器
- 对静态域需要使用静态的初始化块来初始化,再类第一次加载的时候,将会进行静态域的初始化
调用构造器的步骤:
- 所有数据域被初始化为默认值
- 按照再类声明中出现的次序,依次执行所有域初始化语句和初始化块
- 如果构造器的第一行调用了第二个构造器,则执行第二个构造器主体
- 执行这个构造器的主体
初始化顺序:静态块 > 普通块 > 构造函数
包
从你一起的角度看,嵌套的包之间没有任何关系。例如:java.util
和java.util.jar
之间毫无关系。每一个都拥有独立的类集合
在包中定位类是编译器的工作。类文件中的字节码肯定使用完整的包名来引用其它类。
类路径
在1.5版本之后,JRE会自动将当前路径下的类文件作为搜索路径,不用单独设置
搜寻类的步骤:
- 首先检查存储在
jre/lib
和jre/lib/ext
目录下的文件 - 再根据类路径搜索对应的文件
设置类路径
- 通过
-classpath
设置java -classpath xxx
- 通过设置CLASSPATH环境变量
类设计技巧
- 一定要保证数据私有
- 一定要对数据进行初始化
- 不要再类中使用过多的基本类型,可以用一个对象包一下
- 不是所有的域都需要独立的域访问器和域更改器
- 将职责过多的类进行分解
- 类名和方法名要有自描述
- 优先使用不可变的类