首页 > 试题广场 >

请列举你所知道的Object类的方法。

[问答题]
请列举你所知道的Object类的方法并简要说明。
是所有类的基类
发表于 2019-04-26 21:05:03 回复(0)
更多回答
getClass():用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写;equals():用于比较两个对象的地址是否相同,即两个引用是否指向同一个对象;clone():用于创建并返回当前对象的一份拷贝;toString():返回类的名字@实例的哈希码的16进制字符串;notify():唤醒等待队列中的其中一个线程;notifyAll():唤醒线程等待队列中的所有线程;wait(long timeout):让一个线程等待一段时间。

发表于 2019-03-01 11:55:27 回复(1)

1. clone():

实现对象的浅拷贝,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException

  • 浅拷贝:基本数据类型进行值传递,引用数据类型传递引用,并没有真正复制出另外一个
  • 深拷贝:基本数据类型进行值传递,引用数据类型创建一个新的对象,并复制其内容

细说 Java 的深拷贝和浅拷贝

2. getClass():

final方法,获得运行时类型

3. toSting()

4. finalize():

用于释放资源,可以覆盖此方法实现资源清理工作。GC在回收对象之前调用该方法,但是无法确定该方法具体什么时候被调用

5. equals()

6. hashCode()

  • 重写equals()一般都要重写hashCode()
  • equals()返回true,则hashCode()必须相等
    ...
    假如两个Java对象A和B,A和B相等(eqauls结果为true),但A和B的哈希码不同,则A和B存入HashMap时的哈希码计算得到的HashMap内部数组位置索引可能不同,那么A和B很有可能允许同时存入HashMap,显然相等/相同的元素是不允许同时存入HashMap,HashMap不允许存放重复元素。
  • hashCode()相等,不一定equals...哈希冲突
    ...
    1)开放地址法(再散列法):当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi
    2)再哈希法:同时构造多个不同的哈希函数,当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。
    3)链地址法:将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。HashMap底层实现就是这样
    4)建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。
    数据结构与算法:hash冲突解决
  • 不要求不相等的两个对象的hashCode()必须不相等,但是对于不同对象产生不同的Integer结果,有可能会提高hashtable的性能

equals()与hashCode()方法详解

7. wait():

//模板
synchronized (sharedObject) { 
    while (condition) { 
    sharedObject.wait(); 
        // 释放锁,等待唤醒 
    } 
    // ……
}

这里说一下wait()和sleep()方法的区别:

  • wait是Object的方法,而sleep是Thread的方法。
  • sleep方法不会释放锁,可以定义时间,时间过后会自动唤醒。wait方***释放锁。
    sleep不会释放资源,wait进入线程等待池等待,出让系统资源,其它线程可以占用CPU。一般wait不会加时间限制,这是因为如果wait线程运行的资源不够,再出来也没用,要等待其它线程调用notify或notifyAll唤醒等待池中所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒,如果时间不到,只能用interrupt()强行打断。
  • wait、notify、notifyAll只能在同步控制方法或同步控制块中使用,而sleep可以任何地方使用。
  • sleep()和wait()都需要捕获InterruptedException异常

8. notify():

唤醒在该对象上等待的某个线程

9. notifyAll():

唤醒在该对象上等待的所有线程

发表于 2019-04-03 17:56:40 回复(0)
Object()默认构造方法。clone() 创建并返回此对象的一个副本。equals(Object obj) 指示某个其他对象是否与此对象“相等”。finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。getClass()返回一个对象的运行时类。hashCode()返回该对象的哈希码值。 notify()唤醒在此对象监视器上等待的单个线程。 notifyAll()唤醒在此对象监视器上等待的所有线程。toString()返回该对象的字符串表示。wait()导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。wait(long timeout)导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
发表于 2019-05-05 13:25:53 回复(0)
getClass():用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写;
equals():用于比较两个对象的地址是否相同,即两个引用是否指向同一个对象;
toString():返回类的名字@实例的哈希码的16进制字符串;
发表于 2019-05-05 09:29:42 回复(0)
作者:Hua201806040629342
链接:https://www.nowcoder.com/questionTerminal/545cb4874f8f4ada9ed7b19f002b6450?orderByHotValue=1&mutiTagIds=639&page=1&onlyReference=false
来源:牛客网
clone()
          创建并返回此对象的一个副本。
equals(Object obj) 
          指示其他某个对象是否与此对象“相等”。
getClass()
          返回此 Object 的运行时类。
hashCode()
          返回该对象的哈希码值。
notify()
          唤醒在此对象监视器上等待的单个线程
notifyAll()
          唤醒在此对象监视器上等待的所有线程。
toString()
          返回该对象的字符串表示。
wait()
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
发表于 2019-04-01 15:58:03 回复(0)
equals()比较两个对象引用是否指向同一个对象;finalize()gc回收对象时调用;wait()唤醒休眠线程
发表于 2019-03-11 16:21:01 回复(0)
equals比较引用类型,比较数值和引用地址!wait方法,暂停线程!
发表于 2019-02-02 17:08:05 回复(0)