清理与初始化那一章,那个难呀,太难了。
用构造器确保初始化
- 在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。
- 创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证初始化的进行。
方法重载
- 在Java里,构造器是强制重载方法名的另一个原因。既然构造器(构造函数 无参)已经由类名决定,如果想用多种方式创建对象时(即可以用标准方式进行初始化,也可以多个参数作为构造来初始化),这就需要两个构造器
- 区分重载的方法:每个重载的方法都必须有一个独一无二的参数类型列表。
默认构造器
this关键字
- 通常写this,都是指“这个对象”或者当前对象,本身表示对当前对象的引用。
- 一个类中写入多个构造器,当其中一个构造器想调用另外一个构造器时,使用this关键字。
- 当构造参数的名称与当前成员变量的名称相同时,可用this关键字来区分
清理:终结处理和垃圾回收
- 对象可能不被垃圾回收
- 垃圾回收并不等于“析构”
- 垃圾回收只与内存有关
Java清理模式 - 停止-复制-清理 复制清理的大概逻辑是,暂停当前的程序,将所有存活的对象复制出到另一个怼,没有复制的都是可回收的,然后进行清理
- 标记-清扫 所依据的思路同样是从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。找到一个就标记一个,全部标记完成时,开始清理动作。
- 停止-复制 意思是这种垃圾回收动作不是在后台进行的。
成员初始化
- 局部变量 Java会强制初始化 但成员变量 有默认初始化值。
构造器初始化
- 成员变量初始化优先级 > 构造函数 > 成员方法
总结一个对象的创建过程 假设有个名为Dog的类 - 1 即使没有显示地使用static关键字,构造器实际上也是静态方法。因此,当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法首次被访问时,Java解释器必须查找类路径,定位Dog.class文件
- 2 然后载入Dog.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
- 3 当用new Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间。
- 4 这块存储空间将被清零,这就自动地将Dog对象中的所有基本类型数据都设置成了默认值,而引用被设置成了null。
- 5 执行所有出现于字段定义处的初始化动作。
- 6 执行构造器。
- 静态代码块,只在生成这个类的一个对象时,执行一次。(或首次访问属于哪个类的静态数据成员时)
数组初始化
- 模模糊糊
枚举
- 模模糊糊
网友评论