Object源码阅读

来看一下Object这个根类的方法:

1.首先看到的是一个静态代码块调用 registerNatives这个本地方法。

这个方法是干嘛的呢? 查阅资料发现(https://stackoverflow.com/questions/1010645/what-does-the-registernatives-method-do

通常,为了让JVM找到你的本地函数,它们必须以某种方式命名。例如,java.lang.Object.registerNatives对应的C函数被命名Java_java_lang_Object_registerNatives。通过使用registerNatives(或者说,JNI函数RegisterNatives),你可以任意指定你的C函数。

2.getClass方法

这是一个使用final修饰的方法,不能被继承。

3.hashCode()方法

本地方法,返回整形

有几点要注意:

a.在java程序运行期间,若用于equal的方法的信息或者数据没有修改,name同一个对象多次调用此方法返回的哈希码是相同的。而在两次独立运行的java程序,对于同一对象,哈希码可以不同。

b.如果根据equal方法,两个对象相同,那他的哈希码一定相同

c.假如两个对象通过equal比较不相同,那这两个对象返回的哈希码也不是一定要相同。但是使用者应该知道对不同的对象产生不同的hashCode是可以提高hash tables的性能的。

d.实际使用中,要尽量保证不同的对象发挥的哈希码不同。hashCode的一个典型实现是将对象的内部地址转为整数,这种实现不是必须的。

4.equals()方法

equals方法主要是比较两个对象是否相同,Object中的equals方法比较的是对象的地址是否相同。在我们实际的编程过程中,如果要是将一个类作为hashMap等类型的键值时,则此类是需要实现equals和hashCode方法,主要是用来比较键值是否相等以及进行哈希化。

5.clone()方法

克隆函数(浅拷贝)

clone方法是创建并且返回一个对象的复制之后的结果。复制的含义取决于对象的类定义。这个方法一般的意图是对于对象x,能够保证以下的表达式成立。

x.clone() != x;  x.clone().getClass() == x.getClass();  x.clone().equals(x);

这些表达式一般都为true,但是并不是绝对需要的。

按照惯例,返回的对象应该通过调用super.clone()来取得。如果一个类以及它所有的超类都服从这个惯例,那么x.clone().getClass()==x.getClass()成立。

按照惯例,clone方法返回的对象是独立于调用clone方法的对象。为了获得这种独立性,在返回克隆对象之前,需要修改对象的成员变量。即如果我们要是复制可变的对象,内部的部分成员变量是由指定可变对象的引用组成,那么我们对这些成员变量也要进行clone复制,下面有例子说明。但是如果需要复制的类的成员变量是由基本类型或者由指向不可变对象的引用组成,那么我们不需要任何修改,直接对对象调用clone方法即可。

如果一个类没有实现Cloneable接口(这个接口里面没有任何方法的声明,是一个标记接口),那么对此类的对象进行复制时,在运行时会出现CloneNotSupportedException异常。

这里有两个概念需要知道:

浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。

深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

其实浅拷贝和深拷贝只是相对的,如果一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作。

实现对象拷贝的另一个方法是 :序列化(serialization)这个对象,再反序列化回来,就可以得到这个新的对象,无非就是序列化的规则需要我们自己来写。

6.toString()方法

这个方法返回的是类的名称加上@再加上起哈希码的16进制表示

7.notify()方法

通知可能等待该对象的对象锁的其他线程。由JVM(与优先级无关)随机挑选一个处于wait状态的线程。 - 在调用notify()之前,线程必须获得该对象的对象级别锁 - 执行完notify()方法后,不会马上释放锁,要直到退出synchronized代码块,当前线程才会释放锁 - notify()一次只随机通知一个线程进行唤醒 

8.notifyAll()方法

和notify()差不多,只不过是使所有正在等待池中等待同一共享资源的全部线程从等待状态退出,进入可运行状态 让它们竞争对象的锁,只有获得锁的线程才能进入就绪状态 每个锁对象有两个队列:就绪队列和阻塞队列 - 就绪队列:存储将要获得锁的线程 - 阻塞队列:存储被阻塞的线程 

9.wait方法

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

推荐阅读更多精彩内容