《Thinking in Java》ch5 tips

来源:互联网 发布:java调用ffmpeg命令行 编辑:程序博客网 时间:2024/06/05 03:01
5.1 用构造器保证初始化
  • 构造器采用与类相同的名称。构造器是一种特殊类型的方法,因为它没有返回值
  • 当创建一个对象时,也就是给此对象分配到的存储空间起了一个名字
5.2 方法重载
  • 为了让方法名相同而形式参数不同的构造器同时存在,必须使用方法重载。每个重载的方法都必须有一个独一无二的参数类型列表
  • 基本类型能从一个“较小”的类型自动提升至一个“较大”的类型
  • 根据方法的返回值来区分重载方法是行不通的
5.3 默认构造器
  • 如果你写的类中没有构造器,则编译器会自动帮你创建一个默认的构造器。如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器
5.4 this 关键字
  • this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。只有当需要明确指出对当前对象的引用时,才需要使用 this 关键字
  • 除构造器外,编译器禁止在其他任何方法中调用构造器
  • static 方法就是没有 this 的方法,在 static 方法的内部不能调用非静态方法
5.5 清理:终结处理和垃圾回收
  • 假定你的对象(并非使用 new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new 分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,Java 允许在类中定义一个名为 finalize()的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其 finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存
  • 对象可能不被垃圾回收;垃圾回收并不等于“析构”
  • 垃圾回收只与内存有关,使用垃圾回收器的唯一原因是为了回收程序不再使用的内存
  • 之所以要有 finalize(),是由于在分配内存时可能使用了类似 C 语言的做法
  • System.gc()用于强制进行终结动作
5.6 成员初始化
  • Java 尽力保证:所有成员在使用之前都能得到恰当的初始化
  • 类的每个基本数据成员保证都会有一个初始值
  • 在类里定义一个对象引用时,如果不将其初始化,此引用就会得到一个特殊值 null
5.7 构造器初始化
  • 无法阻止自动初始化的进行,它将在构造器被调用之前发生
  • 变量定义的先后顺序决定了初始化的顺序
  • 静态数据的初始化:无论创建多少个对象,静态数据都只占用一份内存区域。static 关键字不能应用于局部变量,因此他只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值;如果它是一个对象引用,那么它的默认初始化值就是 null
  • 静态初始化只有在必要时才进行
  • 初始化的顺序是先静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是“非静态”对象
  • 构造器可以看成静态方法
  • 静态初始化动作只进行一次
5.8 数组初始化
  • 编译器不允许指定数组的大小
  • 在 Java 中可以将一个数组赋值给另一个数组
0 0
原创粉丝点击