《Java核心技术 卷Ⅰ》第四章 对象与类

242 阅读5分钟

需要多次使用的对象 ,存放在一个标识符变量上

更改器方法: 对象中的属性原始值会改变的方法
访问器方法: 只访问对象而不修改对象的方法 注:在C++中,带有const后缀的方法是访问器方法;默认为更改器方法。

类之间的关系

  • 依赖 (use-a): 应该尽可能地将互相依赖的类减至最少 ,降低耦合
  • 聚合 (has-a)
  • 继承 (is-a)

多个源文件的使用 javac Employee*.java 通过使用通配符进行模糊匹配 ,运行该指令则在当前目录下所有前缀为 Employee 的.java 文件都会进行编译

构造器

  • 构造器与类同名
  • 构造器没有返回值
  • 构造器总是伴随着 new操作一起调用
  • 每个类可以有一个以上的构造器
  • 构造器可以有 0 - N 个参数

封装具体实现

  • 一个私有的数据域
  • 一个公有的域访问器方法
  • 一个公有的域更改器方法

如果需要返回一个可变对象的引用,应该首先对它进行克隆(如果需要返回一个可变数据域的拷贝,请记得使用clone

final : 修饰的方法需要赋 初始值 ,代表常量 。不可修改。

static : 属于类且不属于对象的变量和函数。

两种情况下使用静态方法

  • 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(eg: Math.pow)
  • 一个方法只需要访问类的静态域 (Employee.getNextId)

方法参数

  • 方法的参数值是一个拷贝(Copy),方法不能修改传递给它的任何参数变量的的内容,方法结束后这个拷贝(Copy)就会被丢弃。
  • 引用类型也是一样,方法得到的是对象引用的拷贝(Copy),对象的引用 以及 它的拷贝 实际上是同时引用一个对象 ,此时如果操作更新这个引用的对象属性,原对象也会进行更改。
  • 没有引用调用,引用调用实际上也是按值传递的 ,此时,引用本身即是 值。

方法参数的使用情况

  • 一个方法不能修改一个基本数据类型的参数。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。

重载

  • 在同一个类中的多个方法,具有相同的名字、不同的参数,便产生了重载,这与返回值、访问修饰符无关。

默认域初始化

  • 域变量手动进行初始化赋值,可有效防止空指针异常,是一种良好的编程习惯。
//方式一
class Employee{
  private String name = "";//域变量中的引用类型默认初始值是null,手动初始化一个非null之后,在调用时不会报空指针异常,更具有鲁棒性
}
//方式二
class EmployeeB{
  private String name;
  private int salary;
  public EmployeeB(){  //构造时再赋值
      name = "";
      salary = 0;
  }
}

构造器

  • 没有编写自定的构造方法时,Java会自动添加默认构造方法,默认构造方法没有参数。
  • 如果已经自定义了一个或多个构造方法,那么Java将不会自动添加默认的构造方法。

初始化块

  • 用于初始化域变量和方法

静态代码块

  • 类第一次加载的时候,将会进行静态域的初始化,无论new 多少个对象,静态代码块仅加载一次。

finalize方法

  • finalize 方法将在垃圾回收器清除对象之前调用,不要依赖于使用finalize 方法回收任何短缺的资源,因为该方法的调用时机不确定。

  • 包的主要作用是确保类名的唯一性。
  • 类的包声明与目录不匹配,虚拟机就找不到类。

包的作用域

  • 同类、同包 下可访问

类路径

  • 类存在文件系统的子目录中,类的路径必须与包名匹配。

JVM搜索类路径的步骤

  1. 首先要查看存储在 jre/lib 和 jre/lib/ext 目录下的归档文件中所存放的系统类文件。
  2. 然后再查看当前类的路径。
  3. 然后查找以下文件。
举例:
* /home/user/classdir/com/horstmann/corejava/Employee.class
* com/horstmann/corejava/Employee.class 从当前目录开始
* com/horstmann/corejava/Employee.class inside /home/user/archives/archive.jar

编译器定位

  • 编译器将首先查找包含这个类的包,并查询所有的import 指令。
  • 会对这个类路径的所有位置中所列出的每一个类进行逐一查看。

编译器的其他任务

  • 查看源文件是否比类文件新,如果是这样的话,那么源文件就会被自动地重新编译。

设置类路径

  • ① 最好采用 -classpath 选项指定类路径

    java -classpath /home/user/classdir:.:/home/user/archives/archive.jar MyProg

    java -classpath 项目基路径;.;lib依赖目录/文件名 类名

  • ② 设置系统 CLASSPATH环境变量

生成JavaDoc文档

  • ①切换到包含想要生成文档的源文件目录 ,例如 com.oecoo.corejava,就必须切换到包含子目录 com的目录
  • ②如果是一个包,应该运行命令: javadoc -d docDirectory nameOfPackage 或对于多个包生成文档,运行
javadoc -d docDirectory nameOfPackage1 nameOfPackage2

如果文件在默认包下,运行

javadoc -d docDirectory *.java