用户自定义类
- 不要编写返回引用可变对象的访问器方法 P113
- 将函数设置为private:
- 希望将一个计算代码划分成若干个独立的辅助方法
- 需要一个特别的协议以及一个特别的调用次序
- 将实例域定义为final,必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够对它继续操作。final大多数时候应用于基本类型域和不可变类的域。
静态域与静态方法
- static静态域(变量),每个类中只有一个这样的域,若干个对象共享这样一个静态域,静态域是属于类的,不属于任何一个对象。
- static静态常量使用的较多,比如Math.PI, System.out等等。
- 静态方法是一种不能向对象实施操作的方法,如 Math.pow, 在运算的过程中,不使用任何Math对象,即没有隐式的函数。可将静态方法视为没有this参数的方法。
- 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供的
- 一个方法只需要访问类的静态域(如P117的getNextID方法)
- 每一个类可以有一个main方法,这是一个常用于对类进行单元测试的技巧
方法参数
- 方法参数分为两种:基本数据类型(数字、布尔值),对象引用。
- Java对对象采用的不是引用调用,而是值传递 (引用调用的反例即无法进行swap,swap(a,b)中交换的是对两个对象引用的拷贝)
- Java 方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象
对象构造
- 重载:多个方法有相同的名字、不同的参数,便产生了重载。
- 如果没有初始化类中的域,将会被初始化为默认值 (0,false或null)。
- 如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。
- 构造器的明明规则:在每个参数前面加上一个前缀”a”,或者直接使用参数的名字,而利用this指示隐式参数。
- 如果构造器的第一个语句形如this(…),这个构造器将调用同一个类的另一个构造器。
- 静态域可以使用静态的初始化块进行初始化。
- 由于Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
包
import语句不仅可以导入类,还可以导入静态方法和静态域。(如 import static java.lang.System.*后可以直接使用out)但是这种编写形式不利于代码的清晰度。
包作用域:
- public 可以被任意的类使用
- private 只能被定义它们的类使用
- 没有只能public/private,可以被同一个包中的所有方法访问