Object
常见方法
方法 | 作用 |
---|---|
protected object clone() | 负责对象兑隆的 |
int hashCode () | 获取对象哈希值的一个方法 |
boolean equals (object obj) | 判断两个对象是否相等 |
string tostring () | 将对象转换成字符串形式 |
protected void finalize() | 垃圾回收器负责调用的方法 |
toString()
String类已经重写toString方法
以后所有类的toString()方法都是需要重写的。
重写规则
越简单越明了就好。
System.out.println(引用); //这里会自动调用“引用”的toString()的方法
equals()
String类已经重写了equals方法
以后所有的类的equals方法也要进行重写,因为Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要进行重写。
重写规则
自己定,主要看是什么和什么相等时表示两个对象相等。
finalize()的用途
- 如果对象不是通过new关键字创建的,那么垃圾回收器是无法回收该对象的。因此允许在类中实现一个finalize()方法。
它的工作原理"假定"是这样的:当垃圾回收器准备回收对象的内存时,首先会调用其finalize()
方法,并在下一轮的垃圾回收动作发生时,才会真正回收对象占用的内存。
无论对象是如何创建的,垃圾回收器都会负责释放对象所占用的所有内存。这就将对finalize()
的需求限制到一种特殊情况,即通过某种创建对象方式之外的方式为对象分配了存储空间。
这种情况主要发生在使用"本地方法"的情况下,本地方法是一种用 Java 语言调用非 Java 语言代码的形式。(在非 Java 代码中,也许会调用 C 的malloc()
函数系列来分配存储空间,而且除非调用free()
函数,不然存储空间永远得不到释放,造成内存泄露。但是,free()
是 C 和 C++ 中的函数,所以你需要在finalize()
方法里用本地方法调用它。)
- finalize()方法不是专门清理使用的,因此需要我们自己创建一些清理方法,并进行调用。例如:将打开的文件关闭,将打开的流关闭等。这样这个对象就会处于某种状态,这种状态下它占用的内存可以被安全地释放掉。
- finalize()的奇特用法—对象终结条件验证—它可以对上述的”某种状态“进行检验,即程序中存在没有被适当清理的部分。它可以发现它们,从而找到问题所在。
- java的垃圾回收器是自适应的。Java虚拟机将内存分块。
有了块,垃圾回收器就可以把对象复制到废弃的块。每个块都有年代数来记录自己是否存活。通常,如果块在某处被引用,其年代数加 1,垃圾回收器会对上次回收动作之后新分配的块进行整理。这对处理大量短命的临时对象很有帮助。垃圾回收器会定期进行完整的清理动作——大型对象仍然不会复制(只是年代数会增加),含有小型对象的那些块则被复制并整理。Java 虚拟机会监视,如果所有对象都很稳定,垃圾回收的效率降低的话,就切换到"标记-清扫"方式。同样,Java 虚拟机会跟踪"标记-清扫"的效果,如果堆空间出现很多碎片,就会切换回"停止-复制"方式。这就是"自适应"的由来,你可以给它个啰嗦的称呼:"自适应的、分代的、停止-复制、标记-清扫"式的垃圾回收器。 - JIT技术(即时编译技术),一般采用惰性评估的方式。即时编译器只有在必要的时候才编译代码。这样,从未被执行的代码也许就压根不会被 JIT 编译。代码每被执行一次就优化一些,所以执行的次数越多,它的速度就越快。
总结
- java中基本数据类型比较是否相等,使用 ==
- java中所有的引用数据类型统一使用equals方法来判断是否相等