Java中Object类常用的12个方法,你用过几个?[亲测有效]

Java中Object类常用的12个方法,你用过几个?[亲测有效]Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”。Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object 类中的 public 方法。 1. getClass 方法 final 方法、获取对…

Java中Object类常用的12个方法,你用过几个?"

前言

Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”。Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object 类中的 public 方法。

Java中Object类常用的12个方法,你用过几个?[亲测有效]

先看下 Object 的类结构(快捷键:alt+7):

Java中Object类常用的12个方法,你用过几个?[亲测有效]

1. getClass 方法

public final native Class<?> getClass();
final 方法、获取对象的运行时 class 对象,class 对象就是描述对象所属类的对象。这个方法通常是和 Java 反射机制搭配使用的。

2. hashCode 方法

public native int hashCode();
该方法主要用于获取对象的散列值。Object 中该方法默认返回的是对象的堆内存地址。

3. equals 方法

public boolean equals(Object obj) {        return (this == obj);}
该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回 true,否则返回 false。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一般都要重写这个方法。

Java中Object类常用的12个方法,你用过几个?[亲测有效]

4. clone 方法

protected native Object clone() throws CloneNotSupportedException;
该方法是保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常。

默认的 clone 方法是浅拷贝。所谓浅拷贝,指的是对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存。深拷贝则是会连引用的对象也重新创建。

5. toString 方法

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回一个 String 对象,一般子类都有覆盖。默认返回格式如下:对象的 class 名称 + @ + hashCode 的十六进制字符串。

6. notify 方法

public final native void notify();
final 方法,主要用于唤醒在该对象上等待的某个线程。

7. notifyAll 方法

public final native void notifyAll();
final 方法,主要用于唤醒在该对象上等待的所有线程。

8. wait(long timeout) 方法

public final native void wait(long timeout) throws InterruptedException;
wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait() 方法一直等待,直到获得锁或者被中断。wait(long timeout) 设定一个超时间隔,如果在规定时间内没有获得锁就返回。

Java中Object类常用的12个方法,你用过几个?[亲测有效]

9. wait(long timeout, int nanos) 方法

public final void wait(long timeout, int nanos) throws InterruptedException {
  if (timeout < 0) {
    throw new IllegalArgumentException("timeout value is negative");
  }

  if (nanos < 0 || nanos > 999999) {
    throw new IllegalArgumentException(
              "nanosecond timeout value out of range");
  }

  if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
    timeout++;
  }

  wait(timeout);
}
参数说明

timeout:最大等待时间(毫秒)

nanos:附加时间在毫秒范围(0-999999)

该方法导致当前线程等待,直到其他线程调用此对象的 notify() 方法或notifyAll()方法,或在指定已经过去的时间。此方法类似于 wait 方法的一个参数,但它允许更好地控制的时间等待一个通知放弃之前的量。实时量,以毫微秒计算,计算公式如下:

1000000 * timeout + nanos
在所有其他方面,这种方法与 wait(long timeout) 做同样的事情。特别是 wait(0, 0) 表示和 wait(0) 相同。

10. wait 方法

public final void wait() throws InterruptedException {  wait(0);}
可以看到 wait() 方法实际上调用的是 wait(long timeout) 方法,只不过 timeout 为 0,即不等待。

11. finalize 方法

protected void finalize() throws Throwable { }
该方法是保护方法,主要用于在 GC 的时候再次被调用,如果我们实现了这个方法,对象可能在这个方法中再次复活,从而避免被 GC 回收。


最后

欢迎大家关注我的公众号【程序员追风】,文章都会在里面更新,整理的资料也会放在里面。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13875.html

(0)

相关推荐

  • python中的描述符(python描述符的作用)

    python中的描述符(python描述符的作用)首先要说,这个descriptor真的不怎么常用。。。所以题主暂时不必为不理解而着急。

    2023-10-30
    132
  • oracle处理重复数据「终于解决」

    oracle处理重复数据「终于解决」person表中有id和name两个字段,id是唯一值,若id相同,则认为记录重复。

    2023-08-12
    121
  • Python开发中常用的字体库

    Python开发中常用的字体库在Python的开发中,字体库是一个很常用的工具,能够帮助我们轻松地实现对文字的操作。在这篇文章中,我们将会探讨Python开发中常用的字体库,帮助读者更好地学习和使用Python。

    2024-04-08
    71
  • 用 Python 实现双星号妙用

    用 Python 实现双星号妙用在Python中,双星号是一种有趣而又神奇的操作符,它可以在不确定参数个数的时候传递参数。除此之外,** 双星号还有很多其他用途,这篇文章将着重介绍一下双星号在Python中的魔力。

    2024-07-13
    50
  • sql数据库教程视频_微信公开课2020

    sql数据库教程视频_微信公开课2020十四、PostgreSQL 12.2企业级应用系列公开课:调优系列公开课(一) 1、如何获得慢查询的SQL语句 2、常见参数设置因子与应用案例 2.1、shared_buffers 2.2、wal_…

    2023-03-10
    157
  • [冇眼睇]揭秘地下’se’情’诱’导网站,上车吧!

    [冇眼睇]揭秘地下’se’情’诱’导网站,上车吧!对于非技术圈的朋友,很多人总是这样来思考:网上资源再丰富,百度谷歌再牛,也没有比自己身边"修电脑"的朋友强吧。

    2023-07-10
    144
  • PyCharm快捷键注释大全

    PyCharm快捷键注释大全PyCharm是专门为Python开发者打造的一款代码编辑器。除了提供各种常规的代码编辑功能外,PyCharm还提供了丰富的快捷键功能。其中,注释功能是Python开发常用的功能之一,也是PyCharm编辑器中的重要功能之一。那么,本文将详细介绍PyCharm的快捷键注释功能,方便Python开发人员更加高效地进行开发。

    2024-05-29
    61
  • 关于主键设计[通俗易懂]

    关于主键设计[通俗易懂]主键是约束而非数据类型。你可以定义任意列或任意多个的列作为主键。只要其数据类型支持索引。另外在此必须要补充的是,在SqlServer中,主键和聚集索引并没必然的关系。SqlServer只是默认将聚集…

    2023-02-28
    158

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注