初始化和清理及类的加载
初始化方式
构造器:
- java 在创建对象时,用构造器保证对象被初始化。
- 使用 new 关键字,将会为对象分配存储空间,并调用相对应的构造器。
- 构造器名称与类名相同。
- 不接受任何参数的构造器称为默认构造器,也称为无参构造器;
- 构造器也是方法无返回值,和 void 空返回值不同;
- 构造器方法和普通方法的区别:
- 方法名和类名称相同,首字母大写
- 无返回值类型
方法重载:
- 方法签名相同,参数类型不同;
- 方法签名:返回值类型+方法名
this 关键字:
- this 表示当前对象,this 关键字只能在方法内部使用,表示对“调用方法的哪个对象”的引用;
- 在构造器中调用构造器,可以使用 this 关键字;
- 例如调用无参构造器,可以在有参构造器中加入 this();
static 的含义:
static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法
清理:终结处理和垃圾回收
finalize
- Java 技术允许使用
finalize()
方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。
工作原理:
- 工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用
finalize()
,而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize()
,就可以在垃圾收集期间进行一些重要的清除或清扫工作(如关闭流等操作)。 - 使用垃圾回收器的原因是为了回收程序不再使用的内存。
终结条件:
System.gc()
用于强制进行终结动作
垃圾回收机制原理
不同模式有不同机制;
- 引用记数是一种简单但是速度很慢的垃圾回收技术;
- 每个对象都含有一个引用记数器,当有引用连接上对象时,引用记数加 1。当引用离开作用域或者为 null 时,引用记数减一。当引用计数器为 0 时,垃圾回收器会释放资源。
Java 初始化及类的加载
加载过程:
- 先加载非静态区域(未实例化),再加载静态区域默认初始化、显示初始化,然后执行静态代码块。父类先加载。
对象创建过程:
- 对所有非静态成员变量进行默认初始化,调用构造函数,而构造函数分三步走,
- 1、执行 super 语句,
- 2、对所有非静态成员变量进行显式初始化,
- 3、执行构造代码块。
所以在执行构造函数的代码块之前所有成员变量都已经经过显示初始化。在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象。
一、无继承关系
- 1、初始化静态成员变量。
- 2、执行静态代码块。
- 3、初始化非静态成员变量。
- 4 调用构造函数。
- 5、把空间分配的地址赋值给一个引用对象。
二、存在继承关系
- 1、初始化父类静态成员变量。
- 2、执行父类静态代码块。
- 3、初始化子类静态成员变量。
- 4、执行子类静态代码块。
- 5、初始化父类非静态成员变量。
- 6、执行父类非静态代码块。
- 7、执行父类构造函数。
- 8、初始化子类非静态成员变量。
- 9、执行子类非静态代码块、执行子类构造函数。
- 10、把空间分配的地址赋值给一个引用对象。
创建一个有继承关系的子类对象流程的简洁总结:先加载父类,再加载子类,实例化父类,最后实例化子类
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: Java 多线程 常见问题
下一篇: Java 字节码
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论