Object 类
object 类
一、clone
-
完整形式
protected native object clone() throws clonenotsupportedexception
此方法用来实现对象的复制,如果要调用这个方法,必须实现
cloneable
接口和覆盖clone()
方法,还需要在使用克隆的时候处理clonenotsupportedexception
,因为此异常是非运行时异常。-
默认的覆写,只是浅拷贝,也就是只拷贝基本数据类型,而对于对象的引用数据类型,也只是复制一份引用而已。如果想要实现深拷贝,就需要在覆写的时候,将每一个引用数据类型进行克隆,但是这要求这些引用数据类型也都实现了
clonable
接口。// 浅拷贝的重写 public class user implements cloneable{ private int id; private string name; private date bir; @override public object clone() { user user = null; try { user = (user)super.clone(); } catch (clonenotsupportedexception e) { e.printstacktrace(); } return user; } ... }
// 深拷贝的重写 @override public object clone() { user user = null; try { user = (user)super.clone(); user.setbir((date)this.bir.clone()); } catch (clonenotsupportedexception e) { e.printstacktrace(); } return user; }
想要实现完全的深拷贝是很难做到的,因为你不能保证每个引用数据类型都重写了
clone()
,在实际应用中,也很少用的到。
二、finalize
-
完整形式
protected void finalize() throws throwable
此方法是用来释放资源,在垃圾回收器回准备释放该对象的资源时,会调用该方法。主要用在释放资源时,执行一些清除操作。
三、getclass
-
完整形式
public final class<?> getclass()
此方法是返回该对象的运行时类对象。因为java是纯面向对象语言,类型、属性和方法都可以看作是一个对象,所以可以通过类对象可以进行反射的操作,也就是通过类型对象来获取类的属性、方法等。
四、hashcode
-
完整形式
public int hashcode()
-
此方法是返回该对象hash码值。不同的对象有不同的哈希码值,所以在进行对象的比较中或相等判断中要重写此方法。以下是 eclipse 默认重写的方法:
@override public int hashcode() { final int prime = 31; int result = 1; result = prime * result + ((bir == null) ? 0 : bir.hashcode()); result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashcode()); return result; }
五、equals
-
完整形式
public boolean equals(object obj)
-
此方法是用来判断该对象与传入的对象是否相同。而该对象默认的实现是比较两个对象引用是否相等,那对于一些对象的判断就不适用了,需要重写此方法,以下是使用eclipse 重写的方法:
@override public boolean equals(object obj) { if (this == obj) return true; if (obj == null) return false; if (getclass() != obj.getclass()) return false; user other = (user) obj; if (bir == null) { if (other.bir != null) return false; } else if (!bir.equals(other.bir)) return false; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
六、tostring
-
完整形式
public string tostring()
当该对象被打印时,会调用这个方法。它的默认输出形式是
getclass().getname() + '@' + integer.tohexstring(hashcode())
七、wait
-
完整形式和它的重载方法
public final void wait() throws interruptedexception public final void wait(long timeout) throws interruptedexception public final void wait(long timeout,int nanos)throws interruptedexception
此方法是令当前对象进入等待队列,直到被
notifyall
、notify
唤醒或者被interrupt
中断。而带参数的重载方法是超过指定时间就进入等待状态,其中 timeout 单位是毫秒,nanos 单位是毫微秒。
八、notify/notifyall
-
完整形式
public final void notify() public final void notifyall()
notify
是唤醒在此对象监视器上等待的某个线程,而notifyall
是唤醒在此对象监视器上等待的所有线程。