1、equals()
2、hashCode()
3、toString()
4、finalize()
package myObject;
/** hashCode() 方法
* 1、提高具有哈希结构的容器的效率
* 2、两个引用,如果指向的是同一个对象,则哈希值肯定是一样的
* 3、两个引用,如果指向的是不同对象,则哈希值肯定是不一样的
* 4、哈希值主要是由地址号计算得出,不能完全将哈希值等价于地址
* 5、hashCode方法,在集合中根据使用情况进行重写
*/
public class MyHashcode {
public static void main(String[] args) {
Test test = new Test();
Test test1 = new Test();
System.out.println(test.hashCode());
System.out.println(test1.hashCode());
}
}
class Test{}
package myObject;
/**基本介绍
* 1、默认返回: 全类名(包名+类名)+@+哈希值的十六进制
* 2、子类往往重写toString方法,用于返回对象的属性信息
* 3、重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式
* 4、当直接输出一个对象时,toString方法会被默认调用
*/
public class MyToString {
public static void main(String[] args) {
Monster monster = new Monster("猴子","猴子",20.02);
System.out.println(monster.toString() + " HashCode=" + monster.hashCode());
System.out.println(monster);
}
}
class Monster{
private String name;
private String job;
private double salary;
public Monster(String name, String job, double salary) {
this.name = name;
this.job = job;
this.salary = salary;
}
// 重写toString方法(alt+insert -> toString)
// 重写后,一般输出对象的属性值
@Override
public String toString() {
return "Monster{" +
"name='" + name + '\'' +
", job='" + job + '\'' +
", salary=" + salary +
'}';
}
}
package myObject;
/**finalize方法
* 1、当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些资源的释放
* 2、什么时候被回收:当某个对象没有任何引用时,jvm就认为该对象是哟个垃圾对象,
* 就会使用垃圾回收机制来销毁该对象,在销毁该对象前,回调用finalize方法
* 3、垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过 System.gc() 主动触发垃圾回收机制
*/
public class MyFinalize {
public static void main(String[] args) {
Car car = new Car("宝马");
car = null; // 修改引用指向
//此时,car()对象就成为一个垃圾,垃圾回收器就会回收(销毁)对象,在销毁前,会自动调用该对象的finalize方法
//我们可以在此方法内增加一些业务逻辑(例如: 释放资源)
//如果对象中重写了finalize,那么执行对象中的finalize
//如果没有重写,则会在父类中查找,直到调用Object类的finalize
// 需要说明的是,程序不会实时执行回收(即立即销毁对象),垃圾回收有自己的算法
System.gc(); // 主动触发垃圾回收 - 异步
System.out.println("退出程序.....");
}
}
class Car{
private String name;
public Car(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
System.out.println("执行finalize()...");
}
}