Object:
在java中,Object类是所有类的根类,所有类都默认继承Object类。
主要方法如下:
静态块: 执行注册人方法,对此方法简单理解了一下,它的作用在于把hashCode(),wait(),notify(),notifyAll()方法注册为C函数,深入了解可能涉及JVM部分。
static {
registerNatives();
}
getClass()方法: 返回运行时的这个类,在一些场景下在编译过程中不知道具体对象,所以可能需要通过反射来动态获取对象的Class对象。
public final native Class<?> getClass();
hashCode()方法: 返回此实例对象对应的hashCode编码,hashCode运用比较广泛。
public native int hashCode();
equals()方法: 对比两个对象是否相等。
public boolean equals(Object obj) {return (this == obj);}
clone()方法: 克隆方法,如果你需要两个对象实例,这两个对象是同一个物理地址的引用,并且需要对其中一个对象进行处理而不想影响另一个对象时,需要用到此方法。
protected native Object clone() throws CloneNotSupportedException;
toString()方法: 返回字符串方法, 默认返回此类类名 + 对应的hashCode值
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
notify()、notifyAll() 、wait()方法: 多线程中线程交互方法,在学习多线程的时候可以深入了解一下这三个方法。
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
finalize()方法: 垃圾回收器会先调用此方法,在学习JVM的时候,可以深入了解GC垃圾回收机制,并结合起来学习这个方法。
protected void finalize() throws Throwable { }
重点总结:
1.native:
a. 修饰的方法属于本地方法,
b. 通常是由C语言实现, JAVA代码中只用来调用
c. JAVA代码中如果调用,实际上是调用系统中的C语言编写的Dll文件
2.hashCode()
a. 是将对象通过哈希算法计算为一组散列
b. 主要用于查找优化,比如Set这种不可重复的容器
c. 例如Set插入操作: 如果进行equals操作,可以先进行hashCode进行判断, 如果不一致则插入,如果一致再进行equals比较
d.hashCode相等不代表equals相等; equals相等则hashCode必相等
e. 优化: 对象比较, 可以先判断hashCode是否相等, 如果不等则直接操作(例Set.put),如果相等再调用equals , 可以大大
减少equals的调用次数
3.equals()
a. 用来对比对象是否相等
b. 建议所有对象都重写equals方法
c. 建议一同重写hashCode
4.clone()
a.克隆方法为了解决对象互相引用问题
b.克隆分浅度克隆、深度克隆
c.Object提供的是浅度克隆
d.浅度克隆的对象内部的非基础类型(如String)还是指向同一地址
e.深度克隆需要实现Cloneable接口,并重写clone,首先调用Object.clone进行浅克隆,然后把克隆对象内的非基础类型属性
再依次克隆一次才可以