JDK8源码阅读(一) java.lang.Object

Object类的介绍:

Class Object是类Object结构的根。 每个班都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

Object类的方法

5MS)DL_8Q2MJYBX55_IRW2Q.png

1. registerNatives()

1.1 本地方法是联系Java程序和底层主机操作系统的连接方法。

2. clone()

2.1
protected Object clone()throws CloneNotSupportedException

按照惯例,返回的对象应该通过调用super.clone获得。 如果一个类和它的所有超类(除了Object )遵守这个惯例,那将是x.clone().getClass() == x.getClass()的情况。

按照惯例,此方法返回的对象应该与此对象(正被克隆)无关。 为了实现这一独立性,可能需要修改super.clone返回的对象的一个或多个字段。 通常,这意味着复制构成被克隆的对象的内部“深层结构”的任何可变对象,并通过引用该副本替换对这些对象的引用。 如果一个类仅包含原始字段或对不可变对象的引用,则通常情况下, super.clone返回的对象中的字段通常不需要修改。

clone的方法Object执行特定的克隆操作。 首先,如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException 。 请注意,所有数组都被认为是实现接口Cloneable ,并且数组类型T[]的clone方法的返回类型是T[] ,其中T是任何引用或原始类型。 否则,该方法将创建该对象的类的新实例,并将其所有字段初始化为完全符合该对象的相应字段的内容,就像通过赋值一样。 这些字段的内容本身不被克隆。 因此,该方法执行该对象的“浅拷贝”,而不是“深度拷贝”操作。

Object类本身并不实现接口Cloneable ,因此在类别为Object的对象上调用clone方法将导致运行时抛出异常。

3. equals

3.1.public boolean equals(Object obj)

3.2
equals方法在非空对象引用上实现等价关系:

自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。
它是对称的 :对于任何非空引用值x和y , x.equals(y)应该返回true当且仅当y.equals(x)回报true 。
传递性 :对于任何非空引用值x , y和z ,如果x.equals(y)回报true个y.equals(z)回报true ,然后x.equals(z)应该返回true 。
它是一致的 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false ,没有设置中使用的信息equals比较上的对象被修改。
对于任何非空的参考值x , x.equals(null)应该返回false 。

4. finalize

4.1 protected void finalize() throws Throwable
4.2

当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。
finalize的一般合同是,如果Java¢虚拟机已经确定不再有任何方法可以被任何尚未死亡的线程访问的方法被调用,除非是由于最后确定的其他对象或类的准备工作所采取的行动。 finalize方法可以采取任何行动,包括使此对象再次可用于其他线程; 然而, finalize的通常目的是在对象不可撤销地丢弃之前执行清除动作。 例如,表示输入/输出连接的对象的finalize方法可能会在对象被永久丢弃之前执行显式I / O事务来中断连接.

5. getClass

5.1 public final 类<?> getClass()
5.2

返回此Object的运行时类。 返回的类对象是被表示类的static synchronized方法锁定的对象。

6.hashCode

6.1 public int hashCode()
6.2

只要在执行Java应用程序时多次在同一个对象上调用该方法, hashCode方法必须始终返回相同的整数,前提是修改了对象中equals比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。
如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。

7. notify

7.1 public final void notify()
7.2

唤醒正在等待对象监视器的单个线程。 如果任何线程正在等待这个对象,其中一个被选择被唤醒。 选择是任意的,并且由实施的判断发生。 线程通过调用wait方法之一等待对象的监视器。

8.notifyAll

8.1 public final void notifyAll()

8.2

唤醒正在等待对象监视器的所有线程。 线程通过调用wait方法之一等待对象的监视器。

9. toString

9.1 public String toString()
9.2

返回对象的字符串表示形式。 一般来说, toString方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。
该toString类方法Object返回一个由其中的对象是一个实例,该符号字符`的类的名称的字符串@ ”和对象的哈希码的无符号的十六进制表示。 换句话说,这个方法返回一个等于下列值的字符串:

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

10. wait()

10.1 public final void wait() throws InterruptedException
10.2

导致当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll().换句话说,这个方法的行为就好像简单地执行呼叫wait(0) 。
当前线程必须拥有此对象的监视器。线程释放此监视器的所有权,并等待直到另一个线程通过调用notify方法或notifyall方法通知等待此对象监视器的线程唤醒。然后线程等待,直到它可以重新获得监视器的所有权并继续执行。

11. wait(long timeout)

11.1 public final void wait(long timeout) throws InterruptedException
11.2

导致当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()或指定的时间已过
此方法使当前线程将自身置于此对象的等待集中,然后放弃此对象上的所有同步声明。出于线程调度目的,线程将被禁用,并处于休眠状态,直到发生以下四种情况之一:
1. 其他一些线程调用此对象的notify方法,而线程恰好被任意选择为要唤醒的线程;

  2. 其他一些线程为此对象调用notifyall方法;

  3. 其它一些线程interrupt方法终端当前线程;

  4. 指定的实时时间已过,或多或少。但是,如果超时为零,则不考虑实时性,线程只需等待通知;

12. wait(long timeout,int nanos)

12.1 public final void wait(long timeout,int nanos) throws InterruptedException
12.2

使当前线程等待,直到另一个线程为此对象调用notify方法或notifyall方法,或某个其他线程中断当前线程,或经过一定的实时时间
此方法类似于一个参数的wait方法,但它允许更好地控制在放弃之前等待通知的时间。以纳秒为单位的实时量表示为:1000000*timeout+nanos(纳秒)。在所有其他方面,此方法与一个参数的方法wait(long)执行相同的操作。特别地,wait(0,0)与wait(0)的含义相同;
当前的线程必须拥有该对象的显示器。 线程释放此监视器的所有权,并等待直到发生以下两种情况之一:

另一个线程通知等待该对象的监视器的线程通过调用notify方法或notifyAll方法来唤醒。
由timeout毫秒加nanos纳秒参数指定的超时时间已过。
然后线程等待,直到它可以重新获得监视器的所有权并恢复执行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260