Java为每一个对象都定义了一个父类,那就是object类,此类位于java.lang包中,这是个所有Java类的共同父类,称为基类或者根类,其作用主要是定义一些所有对象都应该拥有的共同方法。
object是所有类的父类或者间接父类,Java规定所有没有使用extends显示继承的类,都默认继承于object。
下面来看看object中一些常见的方法:
- getClass()
public final native Class<?> getClass();
这个方法用于返回当前类的字节码文件,字节码文件主要用于反射机制。
2. hashCode()
public native int hashCode();
用于返回当前对象的hash值,这个哈希值是根据一定的算法计算得出来的,此方法在判断或者对比中十分有用,例如,在hashSet中,要求对象必须实现hashCode方法,因为hashSet将会按照这个方法所获得的hash值进行排序,如果hash值相同,则认为是相同对象,拒绝保存。
3. equal()
public boolean equals(Object obj) {
return (this == obj);
}
此方法用于判断当前对象是否跟传入对象地址值相等,因为使用的是==比较运算符,也就是说比较的是对象本身是否为同一个对象,而不是比较对象所存储的数据,一般来说建议所有对象覆写此方法,用于判断自己所关心的数据,例如,当对象代表的是学生时,我们可以认为学生的学号相等就是同一个学生,这时就可以覆写这个方法,改为判断学号。
4. clone()
protected native Object clone() throws CloneNotSupportedException;
这个方法将当前对象复制一份,并返回给调用者。值得注意的是这分为浅克隆和深克隆两种,浅克隆仅仅克隆对象本身,深克隆会将当前调用的对象喝它所包含的对象都克隆一遍。克隆的最大用途就是能将对象像值传递那样传到方法里,方法里的操作不会影响原对象。
5. toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这个方法用于返回对象的字符串表达形式,默认是类名@哈希值,官方建议覆写此方法,返回业务所关心的形式。
6. notify()
public final native void notify();
线程唤醒方法,用于随机唤醒一个正在等待的线程。因为每一个对象或者类都可以被设置为对象锁,所以每个对象都有一个锁池,存放因为失去锁资源而休眠的线程,这个方法的作用就是从锁池中随机唤醒一个线程,使其进入竞争资源的队列中,排队等候时间片,注意,并非一唤醒就立即执行唤醒的线程,唤醒之后还是需要排队等候时间片。
7. notifyAll()
public final native void notify();
和notify方法相似,不同在于这个方法会将所有锁池对象都唤醒,而不是仅仅唤醒一个。
8. wait()
public final native void wait(long timeout) throws InterruptedException;
用于将线程阻塞,当线程调用wait方法之后,会让出cpu资源,自己进入等待状态,此时线程将会进入锁池中,重新排队等锁资源。而sleep方法虽然也是进入阻塞状态,但是不会释放锁资源,所以有一句话说的“抱着锁睡觉”说的就是sleep方法。
- finalize()
protected void finalize() throws Throwable { }
这个方法是垃圾回收机制的一个方法,表示将当前对象标记为垃圾,等待gc删除,一般不会手动调用这个方法,而是由虚拟机自动调用。