概述
- 类是构造对象的模板或蓝图。
- 由类构造对象的过程称为创建类的实例。
- 类之间的关系:依赖、聚合、继承。
- 要想使用对象,必须首先构造对象,并指定其初始状态。然后,对对象应用方法。
- 构造器总是伴随着new操作符的执行被调用,不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
- 构造器没有返回值。
- 所有的java对象都是在堆中构造的。
- 在Java中,所有的方法都必须在类的内部定义,但并不表示它们都是内联方法。
- final 实例域必须在构建对象时初始化,且不能再进行修改。
静态域
- 如果将域定义为static,每个类中只有一个这种域。
- 静态方法是一种不能向对象实时操作的方法。
- 使用静态方法的两种情况:
1)一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(Math.pow)。
2)一个方法只需要访问类的静态域。 - 每个类可以构建一个main方法。可以通过main方法对类进行单元测试。
方法参数
- 按值调用表示方法接收的是调用者提供的值。不能修改传递值调用的变量值。
- 按引用调用表示方法接收的是调用者提供的变量地址。可以修改传递引用对应的变量值。
- Java程序总是采用按值调用,方法得到的是所有参数值的一个拷贝,并不能修改传递给它的参数的内容。
- 方法参数有两种类型:1)基本数据类型(数字、布尔值);2)对象引用。
- 一个方法不能修改一个基本数据类型的参数。
- 一个方法可以改变一个对象参数的类型。
- 一个方法不能让对象参数引用一个新的对象。
对象构造
- 重载:如果多个方法有相同的名字、不同的参数,便产生了重载。编译器通过匹配参数类型和值类型来挑选相应的方法。
- java允许重载任何方法,而不只是构造器方法。
- 方法的返回类型不关于定义重载。
- 如果在构造器中没有显式的对域初始化,那么会被自动赋予默认值:数值为0、布尔值为false、对象引用为null。
- 如果构造器的第一个语句形如 this(…),这个构造器将调用同一个类的另一个构造器。
- Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
- 对象使用了内存之外的其他资源如文件等,需要将其回收和再利用。
- 可以为类添加finalize方法。此方法将在垃圾回收器清除对象之前调用。
包
- Java允许使用包来管理代码。
- 使用包的主要原因是确保类名的唯一性。
- 一个类可以使用所属包中的所有类,以及其他包中的公有类。
- 可以通过import语句来导入包。
- import还可以导入静态方法和静态域。
import static java.lang.System.*;
out.println("GoodBye,World!");
- 标记为public的部分可以被任意的类使用;标记为private的部分只能被定义它们的类使用。如果没有指定public或private,这个部分可以被同一个包中的所有方法访问。
- 类文件存储在文件系统的子目录中。类的路径必须与包名匹配。
- 类文件也可以存储在JAR文件中。在一个JAR文件中,可以包含多个压缩形式的类文件和子目录。
- JAR文件使用ZIP格式组织文件和子目录。
- JDK中的javadoc工具可以将源文件中的注释生成HTML文档。
- 通用注释
| 注释 | 作用 |
|---|
| @author 姓名 | 作者 |
| @version 文本 | 版本描述 |
| @since 文本 | 对引入特性的版本描述 |
| @deprecated 文本 | 对类、方法或变量添加一个不再使用的注释。文本中给出取代的建议 |
| @see 引用 | 可以增加一个超链接 |
类设计技巧
- 保证数据私有,不要破坏封装性。
- 对数据初始化。
- 不要在类中使用过多的基本类型。用其他类代替多个相关的基本类型的使用。
- 不是所有的域都需要独立的域访问器和域更改器。
- 将职责过多的类进行分解。
- 类名和方法名要能体现它们的职责。
- 有限使用不可变的类。