2019独角兽企业重金招聘Python工程师标准>>>

在Java中,所有的类都默认继承同一个类,那就是Object类;Object类是唯一没有父类的类;位于java.lang 包下;

1、定义

2、构造器

默认有系统生成无参构造器  public Object(){};

3、属性

Object类没有声明任何成员变量和类变量

4、方法摘要
protected native   Object clone()

创建并返回此对象的一个副本。  采用本地系统语言编写

这个方法比较特殊,子类必须实现Cloneable 接口 ,否则会抛出异常 java.lang.CloneNotSupportedException;

只能子类进行调用clone,Object类实例无法调用,因为Object没有实现Cloneable 接口 ;该方法只是进行浅拷贝,

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象

public class ObjectTest implements Cloneable {public static void main(String[] args) throws Exception {ObjectTest objTest = new ObjectTest();Object obj = objTest.clone();System.out.println(objTest == obj);}
}
false
public  boolean equals(Object obj)

两个引用是否指向同一个对象。如果子类不重写该方法,默认比较对象引用是否相同;

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

  • 自反性:对于任何非空引用值 xx.equals(x) 都应返回 true

  • 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true

  • 传递性:对于任何非空引用值 xy 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true

  • 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

  • 对于任何非空引用值 xx.equals(null) 都应返回 false

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 truex == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

protected  void finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

public class ObjectTest implements Cloneable {@Overrideprotected void finalize() throws Throwable {System.out.println("回收了");super.finalize();}public static void main(String[] args) throws Exception {ObjectTest objTest = new ObjectTest();for (int i = 0; i < 100; i++) {objTest = new ObjectTest();}ObjectTest obj = (ObjectTest)objTest.clone();System.out.println(obj);}}

在代码中打个Debug断点,然后Debug 运行;

在JDK安装目录打开jvisualvm.exe

选择正在运行的类,在右半部分找到 监视 页,找到  执行垃圾回收按纽 进行点击  查看控制台

public final native   Class<?>  getClass()

返回此 Object 的运行时类。表示Object实际上是哪个类

public class ObjectTest  {public static void main(String[] args) throws Exception {Object objTest = new ObjectTest();System.out.println(objTest.getClass().getName());}}
cn.trip.core.servlet.ObjectTest
public native   int hashCode()

返回该对象的哈希码值。本地方法;

当你覆写(override)了equals()方法之后,必须也覆写hashCode()方法,反之亦然。这个方法返回一个整型值(hash code value),如果两个对象被equals()方法判断为相等,那么它们就应该拥有同样的hash code

hashCode 的常规协定是:

  • 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

  • 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

  • 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

public final   native  void notify()

唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生;

public final native  void notifyAll()

唤醒在此对象监视器上等待的所有线程。

public final  void wait()

在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

public final native  void wait(long timeout)

在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

public final  void wait(long timeout, int nanos)

在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

public   String toString()

返回该对象的字符串表示。

转载于:https://my.oschina.net/u/1028135/blog/637391

Java基础-----基类Object源码分析相关推荐

  1. Java 常用工具类 Collections 源码分析

    文章出处 文章出自:安卓进阶学习指南 作者:shixinzhang 完稿日期:2017.10.25 Collections 和 Arrays 是 JDK 为我们提供的常用工具类,方便我们操作集合和数组 ...

  2. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类--Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类--Live555源码阅读 ...

  3. java多线程系列:ThreadPoolExecutor源码分析,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. Java并发编程之ThreadLocal源码分析

    1 一句话概括ThreadLocal   什么是ThreadLocal?顾名思义:线程本地变量,它为每个使用该对象的线程创建了一个独立的变量副本. 2 ThreadLocal使用场景   用一句话总结 ...

  5. 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析

    问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...

  6. Java集合篇:LinkedList源码分析

    (注:本文内容基于JDK1.6) 一.概述: LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口 ...

  7. java中Mark接口_JVM源码分析之Java对象头实现

    原标题:JVM源码分析之Java对象头实现 原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 "365篇原创计划"第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Ja ...

  8. Java设计模式学习以及底层源码分析

    源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...

  9. java中jcl,spring-jcl 日志源码分析

    1.spring-jcl介绍 JCL全称:Jakarta Commons Logging spring-jcl 采用了设计模式中的"适配器模式",它对外提供统一的接口,然后在适配类 ...

  10. 动态代理最全详解系列[2]-Proxy生成代理类对象源码分析

      之前我们通过JDK中的Proxy实现了动态代理,Proxy用起来是比较简便的,但理解起来不是那么清晰,是因为我们并没有看见代理类是怎么生成的,代理类怎么调用的被代理类方法,所以下面我们进入源码看一 ...

最新文章

  1. db设计专用excel_注塑模具设计与加工解决方案
  2. stm32f103 低功耗调试笔记 低功耗模式下一直有个800多uA的电流
  3. java面试题之----get和post请求方法的区别
  4. 为什么应该用record来定义DTO(续)
  5. Spring自学教程-注解的使用(三)
  6. 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  7. 一个程序员的逗逼瞬间(一)
  8. 深入理解SpringBoot(5)
  9. c#开发大全、系列文章、精品教程
  10. rk3399_android7.1调试串口uart功能和测试是否能通讯
  11. Audacity Mac版(音频录制编辑合成工具)中文版
  12. 正版卡巴斯基安全部队2011激活码1年
  13. python集合常用方法_python基础-集合set的常用方法
  14. 他称向导师下跪,仍被强制退学,5年博士白读,双方各执一词,同门师兄也有回应!...
  15. 物理 常见力与牛顿三定律
  16. 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第六节 窗体对象的锚定
  17. 删库跑路大全 删库跑路
  18. 报名丨2017 GrowingIO 增长大会(北京)
  19. css 笔记——设置禁用中文输入法
  20. 网页报503 service unavailable错误怎么解决

热门文章

  1. Tomcat8.0进入tomcat manager的方法
  2. java mxml_Java 之 XML
  3. python在机械行业的应用_Python语言程序设计与应用-教学大纲
  4. 现代通信原理4.1:随机变量
  5. K8S学习笔记之借助Minikube完成在windows环境下Kubernetes的单节点搭建-(超级简单)
  6. 代码整洁之道读书笔记----第五章---格式--如何让代码整体布局更清晰
  7. bfs和dfs:poj2386和leetcode130
  8. GBDT(Gradient Boosting Decision Tree)
  9. OpenNI XnSkeletonJointOrientation 簡單分析
  10. 最新基于高德地图的android进阶开发(2)小试牛刀