《Thinking in Java》读书笔记5

第五章 初始化与清理

目录

第五章 初始化与清理

5.1 用构造器确保初始化

5.2 方法重载

5.2.1 区分重载方法

5.2.2 涉及基本类型的重载

5.2.3 以返回值区分重载方法

5.3 默认构造器

5.4 this关键字

5.4.1 在构造器中调用构造器

5.4.2 static的含义

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

5.5.1 finalize()的用途何在

5.5.2 你必须实施清理

5.5.3 终结条件

5.5.4 垃圾回收器如何工作

5.6 成员初始化

5.6.1 指定初始化

5.7 构造器初始化

5.7.1 初始化顺序

5.7.2 静态数据的初始化

5.7.3 显式的静态初始化

5.7.4 非静态实例初始化

5.8 数组初始化

5.8.1 可变参数列表

5.9 枚举类型


Java中采用了构造器,并额外提供了垃圾回收器

5.1 用构造器确保初始化

Java中,通过提供构造器,类的设计者可以确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行

创建对象时,将会为对象分配存储空间,并调用相应的构造器

不接受任何参数的构造器饺子默认构造器(Java文档中通常使用术语:无参构造器)

在Java中,初始化和创建捆绑在一起,两者不能分离

构造器是一种特殊类型的方法,因为它没有返回值(与返回值为空(void)的方法不同)

5.2 方法重载

5.2.1 区分重载方法

每个重载方法必须有一个独一无二的参数类型列表

5.2.2 涉及基本类型的重载

基本类型能从一个“较小”的类型自动提升到一个“较大”的类型,此过程一旦牵涉到重载,可能会造成一些混淆

5.2.3 以返回值区分重载方法

根据方法的返回值来区分重载方法是行不通的

5.3 默认构造器

如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动构建默认构造器

5.4 this关键字

this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用

如果在方法内调用同一个类的另一个方法,就不必使用this,直接调用即可

当前方法中的this引用会自动应用于同一类中的其他方法

this关键字对于将当前对象传递给其他方法也很有用

5.4.1 在构造器中调用构造器

可用this关键字做到这点

在构造器中,如果为this添加了参数列表,将产生对符合此参数列表的某个构造器的明确调用;这样,调用其他构造器就有了直接的途径

尽管可以用this调用一个构造器,但却不能调用两个;此外,必须将构造器调用置于最起始处,否则编译器会报错

参数和数据成员名称相同,会产生歧义,用this.s表示数据成员

除构造器外,编译器禁止在其他任何方法中调用构造器

5.4.2 static的含义

static方法就是没有this的方法

在static方法的内部不能调用非静态方法

可以在没有创建任何对象的前提下,仅通过类本身来调用static方法

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

特殊情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。

Java运行在类中定义一个名为finalize()的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法,并在下一次垃圾回收动作发生时才会真正回收对象占用的内存

  1. 对象可能不被垃圾回收
  2. 垃圾回收并不等于“析构”
  3. 垃圾回收只与内存有关

5.5.1 finalize()的用途何在

使用垃圾回收器的唯一原因是为了回收程序不再使用的内存

所以,对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),它们必须同内存及其回收有关

特殊情况:使用“本地方法”

                  本地方法是一种在Java中调用非Java方法的方式

5.5.2 你必须实施清理

垃圾回收器的存在并不能完全代替析构函数(而且绝对不能直接调用finalize())

无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果Java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾垃圾回收以恢复内存的

5.5.3 终结条件

对象终结条件的验证:

        当某个对象不再感兴趣——也就是它可以被清理了,这个对象应该处于某种状态,使它占用的内存可以被安全地释放

只有对象中存在没有被适当清理的部分,程序就存在很隐晦的缺陷

finalize()可以用来最终发现这种情况——尽管它并不总是会被调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值