Object类有哪些方法?
1.1 protected native Object clone() throws CloneNotSupportedException;(native关键字标识的方法,代表该方法通过C/C++实现)
clone是浅拷贝;只克隆自身对象和对象内的实例变量的引用地址,但是使用该方法必须实现cloneable接口(扩充:深度拷贝使用objectStream;先将对象序列化;再反序列化)。
1.2 public boolean equals(Object obj){ return (this==obj);}
很显然该方法,比较传入的对象和this地址是否相等,判断传入的对象是否和this是同一个对象。
1.3 protected void finalize() throws Throwable{}
子类覆盖该方法来实现资源清理的工作,并且该方法是在GC回收对象之前调用该方法。
扩展:final、finally和finalize的区别?
final:对类、方法和变量的关键字修饰符。final修饰类时,该类不能被继承;final修饰方法时,防止子类对该方法修改(特列:子类也能定义跟该方法同名的方法,但是该方法必须被private修饰);final修饰变量时,该变量变成为常量,只能进行一次显示赋值。
finally:作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示该语句块最终一定会被执行。(try/catch正常执行并且没有强制退出程序的情况下,finally语句块必然会被执行)
finalize:finalize()是java.lang.Object里定义的方法,并且当该对象被回收的时候被调用。
1.4 public final native Class<?> getClass;
动态获取当前运行时,对象的Class对象。
1.5 public native int hashCode;
获取当前对象的hashCode的值,该值是在整数范围内[-2^31~2^31-1]。
扩展:
1、每个对象的hashCode值在一个程序/系统中是具有唯一性。
2、若二个对象对用equals比较值是否相等,equals方法返回true,那么二个对象的hashCode返回的值一定相等,而该方法返回值为false,则hashCode返回的值不一定不相等。
1.6 public final native void notify/notifyAll();
notify()方法随机唤起线程池中阻塞的线程,notifyAll()方法随机唤起线程池中所有阻塞的线程。(notify()和notifyAll()方法只能用在synchronized方法或者代码块中)
1.7 private static native void registerNatives() ;
调用registerNatives()方法完成对该类本地方法的注册。
作用:
1、通过registerNatives()方法在类被加载的时主动将本地方法链接到调用方。
2、本地方法在程序运行中更新,也可以通过调用registerNative方法进行更新;
3、Java程序需要调用一个本地应用提供的方法时,因为虚拟机只会检索本地动态 库,因而虚拟机是无法定位到本地方法实现的,这个时候就只能使用 registerNatives()方法进行主动链接。
参考:Object类中的registerNatives本地方法的作用_住手丶让我来的博客-CSDN博客
1.8 public String toString(){ return getClass.getName() + "@" + Integer.toHexString(hashCode()); }
toString()方法一般会被子类重写。
1.9
wait()/wait(int timeout, int nanos)方法基于wait(long timeout)实现,这些方法都只能再synchronized方法或者代码块中,其作用让该线程让出CPU,释放锁,进入阻塞状态。