Thinking in Java 第四章“初始化与清楚”要点总结

1.构造器

2.重载

3.缺省构造器(无参构造器)

4.this关键字

编译器会在调用某方法的时候悄悄把调用对象的引用作为第一个参数传入方法中,而this关键字就可以代表这个引用对象。

在构造器中,this可以用于初始化。

可以用this来代表构造器

5.再谈static方法

static方法其实就是没有this的方法,因为他不涉及对象。这其实不是面向对象的。

6.finalization

在垃圾回收器准备好释放对象的存储空间时,会先调用finalize函数,在这个函数中可以释放一些非new的存储区域(通过非new分配的内存存储在一个特殊区域,垃圾回收器不知道如何释放这块特殊区域)。然后再将对象释放。

重点:

1.对象可能不被回收

2.垃圾回收并不等于“析构”

3.垃圾回收之和内存有关

再java里面使用C/C++代码时,才可能出现那块特殊区域。所以finalize函数的使用次数并不多

可以使用System.gc()来回收资源

System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。我们习惯了从现实世界的经验中获得的“条件适用”。一切都附有免责声明!

finalize()可以用来检查终结条件:比如文件再打开的时候不能回收,就可以在finalize里面判断文件的状态。

7.垃圾回收机制

Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。

垃圾回收的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象,而且最终释放没用的对象。这一个过程需要花费处理器的时间。其次垃圾回收算法的不完备性,早先采用的某些垃圾回收算法就不能保证100%收集到所有的废弃内存。当然随着垃圾回收算法的不断改进以及软硬件运行效率的不断提升,这些问题都可以迎刃而解。

Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。

8.初始化

作为成员基本类型的默认值是0、flase等

作为成员的对象的默认值是null

构造器初始化、静态初始化、非静态实例初始化(多用于匿名内部类里面)

https://www.cnblogs.com/BlackStorm/p/5699965.html

执行顺序:父类的静态初始化块、子类的静态初始化块、父类的实例化块(父类成员初始化)、父类的构造函数、子类的实例化块(子类成员初始化)、子类的构造函数

猜你喜欢

转载自blog.csdn.net/weixin_38967434/article/details/82080231