java源码阅读之java.lang.Object

 更新时间:2018年01月04日 09:37:48   作者:Leesire  
这篇文章主要介绍了java源码阅读之java.lang.Object,具有一定借鉴价值,需要的朋友可以参考下

Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法?

1.clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法

final方法,获得运行时类型。

3.toString方法

该方法用得比较多,一般子类都有覆盖。

4.finalize方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5.equals方法

该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6.hashCode方法

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash-Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法

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

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法

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

9.notifyAll方法

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

—Object—

ClassObjectistherootoftheclasshierarchy.EveryclasshasObjectasasuperclass.Allobjects,includingarrays,implementthemethodsofthisclass.——FromOracle

—释义—

Object类是java中所有对象所继承的父类,即便是数组也继承了该父类(可以理解为原始类,所有类的祖先,你也许会想问:詹姆斯第一个写的类是不是Object?)。

所有类对Object类的继承都是隐式继承,所以无法看到。

—Object—

默认构造方法

—clone—

—equals—

Indicateswhethersomeotherobjectis"equalto"thisone.

Theequalsmethodimplementsanequivalencerelationonnon-nullobjectreferences:—FromORacle—

原始类Object的equals比较的是两个变量的非空对象的引用。

源码:

public boolean equals(Object obj) {   
  return (this == obj);   
  }

通过源码我们看到,原始类equals其实与“==”是等价的。

—finalize—

—getClass—

—hashcode—

IntheJavaprogramminglanguage,everyclassimplicitlyorexplicitlyprovidesahashCode()method,whichdigeststhedatastoredinaninstanceoftheclassintoasinglehashvalue(a32-bitsignedinteger).Thishashisusedbyothercodewhenstoringormanipulatingtheinstance–thevaluesareintendedtobeevenlydistributedforvariedinputsforuseinclustering.Thispropertyisimportanttotheperformanceofhashtablesandotherdatastructuresthatstoreobjectsingroups("buckets")basedontheircomputedhashvalues.Technically,inJava,hashCode()bydefaultisanativemethod,meaning,ithasthemodifier'native',asitisimplementeddirectlyinthenativecodeintheJVM.

Source:Wikipedia

java中每个类都隐式或者显式的实现了Object的hashcode方法。

跟谷歌和官方个人总结,作者为什么要在原始类中存在hashcode呢?

①、类对象的存储优化,便于查找类对象。

②、配合equals使用。

注意:很多博客表示hashcode方法返回的是该类的物理存储地址或者是逻辑存储地址,这个说法是错误的,按照官方的说法:返回的32位值只是与类对象的存储位置有关。

—notify—

—notifyall—

—toString—

ThetoStringmethodforclassObjectreturnsastringconsistingofthenameoftheclassofwhichtheobjectisaninstance,theat-signcharacter`@',andtheunsignedhexadecimalrepresentationofthehashcodeoftheobject.Inotherwords,thismethodreturnsastringequaltothevalueof:

getClass().getName()+'@'+Integer.toHexString(hashCode())

源码:

 public String toString() {  
    return getClass().getName() + "@" + Integer.toHexString(hashCode());  
  }

返回一个格式为类名+@+该类的hash值。

—wait—

finalize()

总结

以上就是本文关于java源码阅读之java.lang.Object的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Mybatis-Plus之ID自动增长的设置实现

    Mybatis-Plus之ID自动增长的设置实现

    本文主要介绍了Mybatis-Plus之ID自动增长的设置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Skywalking改成适配阿里云等带Http Basic的Elasticsearch服务

    Skywalking改成适配阿里云等带Http Basic的Elasticsearch服务

    这篇文章主要介绍了改造Skywalking支持阿里云等带Http Basic的Elasticsearch服务
    2022-02-02
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    这篇文章主要介绍了SpringCloud之配置刷新的原理,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • eclipse报错 eclipse启动报错解决方法

    eclipse报错 eclipse启动报错解决方法

    本文将介绍eclipse启动报错解决方法,需要了解的朋友可以参考下
    2012-11-11
  • Java Stream常用方法合集(超详细)

    Java Stream常用方法合集(超详细)

    Stream API 提供了一种更为简洁高效的的方式来处理集合数据,  可读性较高, 所以本文为大家整理了Java Stream中的常用方法,希望对大家有所帮助
    2023-07-07
  • 关于idea-web.xml版本过低怎么生成新的(web.xml报错)问题

    关于idea-web.xml版本过低怎么生成新的(web.xml报错)问题

    今天通过本文给大家分享idea-web.xml版本过低怎么生成新的(web.xml报错)问题,通过更换web.xml版本解决此问题,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • 解读@Data注解父子类继承的问题

    解读@Data注解父子类继承的问题

    在Java开发中,使用Lombok库的@Data注解简化了代码,但在父子类继承关系中使用@Data注解时会遇到问题,主要问题是:当父类和子类都使用@Data注解时,会导致equals方法不对称,解决方案是在子类中使用@EqualsAndHashCode注解
    2024-11-11
  • SpringBoot分离打Jar包的两种配置方式

    SpringBoot分离打Jar包的两种配置方式

    这篇文章主要介绍了SpringBoot分离打Jar包的两种配置方式,方式一是基于maven-jar-plugin,方式二是基于spring-boot-maven-plugin,文中结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Mybatis 自动映射(使用需谨慎)

    Mybatis 自动映射(使用需谨慎)

    这篇文章主要介绍了Mybatis 自动映射(使用需谨慎),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 基于SpringBoot+Redis实现分布式锁

    基于SpringBoot+Redis实现分布式锁

    本文主要介绍了基于SpringBoot+Redis实现分布式锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论