Object类方法
Object类的组成:
1、clone()
这个方法是为object的克隆对象的而生。有些人可能会不明白,克隆不就是copy吗?copy不就是跟new一个对象差不多嘛?
其实不然,clone()方法存在的意义在于java语言的对象引用机制。
如:
Person p1 = new Person();
Person p2 = p1;
此时,p1和p2是引用的同一个对象的,这个对象是在jvm的堆内存中共享的。也就睡说。如果p2被一系列操作改变了它本身的属性值,那么p1也会跟着改变,至始至终,p1和p2引用的是同一个东西。
那么要避免p1跟着p2发生变动,应该怎么做呢?
那就是可以使用到clone()方法了。使用这个方法可以在堆中克隆出另一个对象,这样一来,p2变动,p1就不会变了,因为他们引用的不再是同给一个对象。
clone方法的使用上,要注意,首先要实现Cloneable的接口,然后在类中重写Object类中的clone方法,具体过程可以自行研究,不做赘述。
2、equal()和hashCode()方法
equal比较两个对象是否相等(价值)
”==“和hashCode()比较对象的地址
3、finalize()
这个方法是专供垃圾回收提供的,垃圾回收期跳如果要针对一个类的对象进行回收,那么它会先调用finalize()方法,但要注意,并非调用了finalize(),就马上会回收。java的垃圾回收机制是无法认为预测的,它只在jvm认为合适的时候才会进行回收。而所谓的合适,唯一的判断标准就是内存不足。
4、getClass()
此方法与反射有关。用于返回一个返回该对象的运行时类的java.lang.Class对象。也就是运行中的对象本身。
5、notify、notifiAll和wait()
对多线程熟悉的童鞋应该比较清楚这三个方法。这三个方法是相辅相成来实现多线程的。wait()来阻塞线程,wait()被调用后,线程将会进行等待状态,锁被释放,同时线程也会让出cpu资源,其他的线程可以运行。notify\notifyAll方法用于唤醒线程,调用notify\notifyAll方法后,不会立即释放锁,而是等待sychronize代码块执行完后。或者遇到wait()方法后,在释放锁。因此,有一点要非常注意,notify、notifiAll和wait()是必须在sychronize包含的代码快中使用。这跟thread类的sleep方法是不一致的,sleep()方法可以在任意地方使用。
6、toString()
toString()方法就更不用多说了,很多时候我们会在类里面重写这个方法。它默认的作用是就对象转化为字符串的形式。如果是基础数据类型,如int ,long,byte等等,但如是引用对象,toString()将会转化为该对象的内存地址。