Object类中的方法

####概述
  今天遇到的一个面试题,也是一个老题了,但并没有特别清晰的感觉。既然所有类都默认继承了Object类,那其中的方法确实可以总结一下。除了一个无参构造外,在JDK6.0(1.6)中一共有11个方法。
####clone()
  protected Object clone() throws CloneNotSupportedException 创建并返回此对象的一个副本。
  如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。此方法执行的是该对象的“浅复制”。

//没有重写clone()方法与equals()方法,已实现接口Cloneable

public Student(String name, int id) {
	super();
	this.name = name;
	this.id = id;
}

public static void main(String[] args) throws CloneNotSupportedException {
	Student student=new Student("Alice",23);
	Student clone=(Student)student.clone();
	System.out.println(clone.name);//Alice
	student.name="Bob";
	System.out.println(clone.name);//Alice
	System.out.println(student==clone);//false
	System.out.println(student.equals(clone));//false
	System.out.println(student.getClass()==clone.getClass());//true	
}

####equals()
  public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
  如果不进行重写,则与==的意义完全相同,判断两个对象是否指向同一地址。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
####finalize()
  protected void finalize() throws Throwable当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法(并不确定什么时候)。
  子类可以重写 finalize 方法,以配置系统资源或执行其他清除,但一般不需要重写,也尽量别用着玩。有待研究。
####getClass()
  public final Class<> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
####hashCode()
  public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
  hashCode 的常规协定是: 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
  如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
####toString()
  public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
  Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
####notify(),notifyAll()
  public final void notify()唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。
  public final void notifyAll()唤醒在此对象监视器上等待的所有线程。
####wait()
  public final void wait() throws InterruptedException在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
  public final void wait(long timeout) throws InterruptedException在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
  public final void wait(long timeout, int nanos) throws InterruptedException在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
  具体详情还需更多参考资料。
####总结
  一般而言,equals()方法需要重写,toString()方法也可能需要。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值