Object是所有类的顶级父类 ---- 也是java中唯一没有父类的类
所有的类都是Object的子类 ,所以所有的对象都能用Object接住 , 所有的对象都可以使用Object中的方法 。
常用方法摘要:
1. clone() 克隆并产生一个新的对象,新对象的地址与原对象地址不同,但属性值 相同。克隆时需要强制类型转换 , 并抛出 CloneNotSupperException异常 。
一个类要想被克隆则必须实现Cloneable这个接口,这个接口中没有任何的属性和方法,只是用类标识这个类产生的对象可以被克隆。
2. getClass() 获取当前对象的实际类型 , 而不是声明类型 。
3. equals(Object 0) 判断两个对象是否一样 ***面试要求手写***
原生的equals方法与 == 作用相同,判断的是 对应的直接值(基本数据类型 -- 值 ,引用数据类型 --- 地址)
在开发中一般重写后用于判断对象中存储的值是否相同
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Team other = (Team) obj;
if (i != other.i)
return false;
if (str == null) {
if (other.str != null)
return false;
} else if (!str.equals(other.str))
return false;
return true;
}
4. fanilize() --- 通知垃圾回收器回首对象,但是垃圾回收器不一定执行。即使gc开始回收 , 也只回收当前对象 。 System.gc()通知回收所有垃圾对象 。
System.gc() --- 底层就是fanilize,作用相同
5. hashCode() 根据散列算法计算出一个值 获取对象的哈希码(int类型),计算完成之后会产生一个32为的二进制数字 , 但是打印时会转换为十进制显示。2的32次 --43亿多个值 , 所以一般在同一时期不会产生相同的哈希码 ,相对而言(与程序算法 , 程序运行时环境有关 )哈希码是唯一的 。如果对象还一直不被释放 , 则哈希码不变 。 如果两个对象eruals为true , 则两个对象哈希码一定相同 。 但 哈希码相同的两个对象 , 不一定相同 。
本地方法 native修饰 底层用C语言实现
重写hashCode方法的时候,当equals值为true时,哈希吗必须一致。反过来不成立6. toString() 当打印一个对象的时候,默认是调用这个对象的toString方法。**重点**
6. toString() : 用于打印对象 。 当直接打印对象的时候, 实际上已经调用了这个对象的toString()方法 。 Object中的toString()方法打印的是对象的地址 getclass()+"@"+o.toHashString(o.hashCode())//将哈希 吗转换为16进制。