Thinking in Java 读书笔记-初始化与清理

来源:互联网 发布:matlab数据相关性分析 编辑:程序博客网 时间:2024/04/30 10:57

构造器

在java中,类的设计者通过提供构造器确保每个对象得到初始化(特殊情况除外,可以将构造器写成private,这种情况一般出现在设计者不让开发者随意创建该类对象,如单例模式)。

构造器采用与类相同的名称,以防止(1)与类的成员名称重名;(2)让编译器知道调用该方法。

构造器是一种特殊类型的方法:无返回值(不同于void)。


不接受任何参数的构造器叫做默认构造器或者无参构造器,其作用是创建一个默认对象。如果类中没有构造器,编译器则会自动创建一个默认构造器。

清理:终结处理和垃圾回收

finalize()方法:在垃圾回收时刻进行的操作。我们只能保证在垃圾回收时刻会调用finalize()方法,但是不能控制什么时候进行垃圾回收。决定什么时候进行垃圾回收的是JVM,因为垃圾回收本身也有开销,所以可能只要程序没有濒临存储空间用完的那一刻,对象的占用空间就总得不到释放。finalize()不能直接调用。finalize()无法预料,常常是危险的,多余的。(Effective Java)

垃圾回收器工作原理看到的一篇比较好的文章:Java的内存回收机制
引用计数技术:每个对象含有一个引用计数器,当有用用连接至对象时,引用计数加1。当引用日开始作用域或者被置null时,引用计数器减1。当发现某个对象的引用计数为0时,就释放其占用的空间。缺点:无法解决循环应用问题。
其他见超链接。

成员初始化

方法的局部变量必须初始化,否则编译器会报错;类成员变量会自动完成默认初始化(置二进制0)。
如果一个对象没有进行初始化操作就使用则会出现运行时错误。
对象创建过程,以Dog类为例:
  1. Dog类的静态方法/静态域首次被访问时(包括首次创建Dog对象,因为构造器可以看成静态方法),java解释器查找类路径,以定位Dog.class文件。
  2. 载入Dog.class,执行静态初始化的所有动作。静态初始化只加载一次。
  3. 当用new Dog()创建对象时,首先将在堆上为Dog对象分配足够的存储空间。
  4. 这块空间会被清零,这就自动的将Dog对象中的所有基本类型数据都设置为默认值,而引用则被设置成null。
  5. 执行所有出现于字段定义处的初始化操作。包括自动初始化和实例初始化。
  6. 执行构造器。

tips:

  1. 方法重载区分方法:参数类型列表。不能根据返回值区分重载方法。
  2. this关键字返回当前对象的引用。构造器可以通过this关键字调用其他构造器。

原创粉丝点击