任务练习部分见资源下载
C4Java基础-03:控制台-任务练习-其它文档类资源-CSDN下载
on java8 第六章 初始化和清理
构造器初始化
自动初始化发生在构造器初始化之前
类中变量定义初始化在构造器之前
静态的基本类型,如果你没有初始化它,那么它就会获得基本类型的标准值,如果是对象引用,就是null。
加载类->如果类是第一次加载则初始化静态成员变量->初始化非静态成员变量
导致类加载的原因: 1、new 一个类的对象 ; 2、调用类的静态方法和静态成员变量
创建一个类的对象过程:
1、构造器其实也是静态方法,加载类,Java解释器在类路径中查找,定位java.com.util...class;
2、加载类之后,首先初始化静态成员变量(如果是第一次加载类);
3、当通过new 方法创建对象,在堆上分配内存空间;
4、分配的存储空间首先会被清零,对象的基本类型数据设置为默认值,引用设置为null;
5、执行所有出现在字段定义处的初始化动作;
6、执行构造器。
枚举类型
由于枚举类型的实例是常量,因此按照命名惯例,它们都用大写字母表示(如果名称中含有多个单词,使用下划线分隔)
由于 switch 是在有限的可能值集合中选择,因此它与 enum 是绝佳的组合
我们使用enum定义的枚举类型,会在编译之后转化为一个继承了java.lang.Enum的类,而我们定义的每个枚举值都会在类的初始化阶段被实例化为我们所定义的枚举类的一个对象。
垃圾回收器
finalize() 方法的工作原理"假定"是这样的:当垃圾回收器准备回收对象的内存时,首先会调用其 finalize() 方法,并在下一轮的垃圾回收动作发生时,才会真正回收对象占用的内存。
finalize() 是一个潜在的编程陷阱。
在 Java 中,对象并非总是被垃圾回收:
- 对象可能不被垃圾回收。
- 垃圾回收不等同于析构。
- 垃圾回收只与内存有关。
将对 finalize() 的需求限制到一种特殊情况,即通过某种创建对象方式之外的方式为对象分配了存储空间。
看起来之所以有 finalize() 方法,是因为在分配内存时可能采用了类似 C 语言中的做法,而非 Java 中的通常做法。这种情况主要发生在使用"本地方法"的情况下,本地方法是一种用 Java 语言调用非 Java 语言代码的形式。
本地方法目前只支持 C 和 C++,但是它们可以调用其他语言写的代码,所以实际上可以调用任何代码。在非 Java 代码中,也许会调用 C 的 malloc() 函数系列来分配存储空间,而且除非调用 free() 函数,不然存储空间永远得不到释放,造成内存泄露。但是,free() 是 C 和 C++ 中的函数,所以你需要在 finalize() 方法里用本地方法调用它。
绝对不能直接调用 finalize()方法。
在不需要类似析构器行为的时候,Java 的垃圾回收器极大地简化了编程,并加强了内存管理上的安全性。一些垃圾回收器甚至能清理其他资源,如图形和文件句柄。然而,垃圾回收器确实增加了运行时开销,由于 Java 解释器从一开始就很慢,所以这种开销到底造成多大的影响很难看出来。随着时间的推移,Java 在性能方面提升了很多,但是速度问题仍然是它涉足某些特定编程领域的障碍。
转载