Object类
主要需要学会使用的方法
- hashCode:将地址根据hash算法10进制值
- 重写equals方法
- gc垃圾回收
- clone方法需要类实现空接口Cloneable
- 重写toString方法,按照我们自己的格式打印信息
- 重写finalize方法(垃圾回收),平时是由gc主动调用的
package com.li.changGe.commonlyusedClass;
public class ObjectDemo01 implements Cloneable{
private String name;
public ObjectDemo01(String name){
this.name = name;
}
public static void main(String[] args) {
ObjectDemo01 name = new ObjectDemo01("长歌");
ObjectDemo01 name1 = new ObjectDemo01("长歌");
/**
* hashCode:将地址根据hash算法10进制值
*/
System.out.println(name.hashCode());//21685669
System.out.println(name.toString());//长歌 hello world
//--------------------------------------------------
/**
* 重写equals方法前是false
* 重写后是true
*/
System.out.println(name.equals(name1));
//--------------------------------------------------
/**
* 当对象没有变量或引用地址指向它时就变成了垃圾
* 会被gc回收:没有人引用变成垃圾
*
* 长歌被回收了
*/
//new ObjectDemo01("长歌");
name = null;
System.gc();
//--------------------------------------------------
/**
* 我们可以用一个对象"整体复制"另一个对象
* 使两个对象中的数据相同
*
* clone方法需要类实现空接口Cloneable
* clone是浅复制:分配和对象相同大小的空间,再填充数据
* 吃多少拿多少,不浪费
* 先认为是另一种方式的name = name1
*
* new是按类型分配空间,再填充数据
*/
name = name1;
System.out.println("s"+name.name);//s长歌
try {
ObjectDemo01 clone = (ObjectDemo01) name1.clone();
System.out.println("clone:"+clone.name);//clone:长歌
System.out.println(clone == name1);//false
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
//--------------------------------------------------
/**
* 重写toString方法
*/
public String toString(){
return this.name+" hello world";
}
/**
* 重写equals方法:
* 原本的equals只有一行代码:return (this == obj)
* 本质还是用==号比较
*
* 所以当两个对象中有相同属性时,而且属性值相同
* 它返回的还是false
*
* 这次重写的目的:
* 比较时按照属性值来比较
*/
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(this == obj){
return true;
}
/**
* instanceof比较双方是否是同类,或者构成父子关系
*/
if(this instanceof Object){
ObjectDemo01 value = (ObjectDemo01)obj;
if(this.name == value.name){
return true;
}
}
return false;
}
//--------------------------------------------------
/**
* 重写finalize方法(垃圾回收)
* 平时是由gc主动调用的
*/
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"被回收了");
}
}