Object类的常用方法

1 clone()  :创建并返回副本

使用clone方法必须实现Cloneable接口,并重写clone方法

public class CloneTest implements Cloneable{
String str=null;
CloneTest(String str){
this.str=str;
}
@Override
protected Object clone(){
// TODO Auto-generated method stub
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
public static void main(String[] args) {
CloneTest t1=new CloneTest("abcd");
System.out.println(t1.clone());
}
}

2 equals(): 比较是否相等,Java中Object是所有类的基类,Object中equals和==都是比较的两个对象的内存地址。子类一般都重写了equals方法

public class EqualsTest {
public static void main(String[] args) {
Object obj1=new Object();
Object obj2=new Object();
System.out.println(obj1.equals(obj2));
String str1=new String();
String str2=new String();
System.out.println(str1.equals(str2));
}
}

运行结果:
false

true

3  finalize:当垃圾回收器确定不存在此对象的更多引用时,由对象的垃圾会收器调用此方法

4 getClass:获得此对象的运行时类

5 toString:返回一个字符串,当没有被子类覆盖时,类名+@+该对象哈希码的无符号十六进制表示组成。一般子类覆盖。

public class TostringTest {
public static void main(String[] args) {
Person p=new Person();  //沒有重寫Person類的toString方法
System.out.println(p);//会默认执行对象的toString方法
}
}
class Person{
String name;
int age;  
}

运行结果:com.liu.test6.Person@4f1d0d

6 wait:此方法只能由作为此对象监视器的所有者的线程调用。在调用notify或者notifyAll之前,导致当前线程等待

7 notify:唤醒某一个线程(选择随机)

直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;

例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。  


一个线程如何成为某对象监视器的所有者

(1):执行某对象的同步实例方法

(2):执行某类的同步静态方法

(3):执行在此对象上进行同步的synchonized语句的上下文


8 notifyAll:唤醒在此对象监视器上等待的所有线程

9 hashCode:返回此对象的哈希值。一般重写tostring方法的子类都重写了hashCode方法

hashCode 的常规协定是:

  • 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
  • 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。 

猜你喜欢

转载自blog.csdn.net/w_q_q_/article/details/78965459