Object类源码分析及应用建议

Object:

    在java中,Object类是所有类的根类,所有类都默认继承Object类。


主要方法如下:

    静态块: 执行注册人方法,对此方法简单理解了一下,它的作用在于把hashCode(),wait(),notify(),notifyAll()方法注册为C函数,深入了解可能涉及JVM部分。

static {
    registerNatives();
}

    getClass()方法: 返回运行时的这个类,在一些场景下在编译过程中不知道具体对象,所以可能需要通过反射来动态获取对象的Class对象。

 public final native Class<?> getClass();

    hashCode()方法: 返回此实例对象对应的hashCode编码,hashCode运用比较广泛。

public native int hashCode();

    equals()方法: 对比两个对象是否相等。

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

     clone()方法: 克隆方法,如果你需要两个对象实例,这两个对象是同一个物理地址的引用,并且需要对其中一个对象进行处理而不想影响另一个对象时,需要用到此方法。

protected native Object clone() throws CloneNotSupportedException;

    toString()方法: 返回字符串方法, 默认返回此类类名 + 对应的hashCode值

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

    notify()、notifyAll() 、wait()方法: 多线程中线程交互方法,在学习多线程的时候可以深入了解一下这三个方法。

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

    finalize()方法: 垃圾回收器会先调用此方法,在学习JVM的时候,可以深入了解GC垃圾回收机制,并结合起来学习这个方法。

protected void finalize() throws Throwable { } 

 重点总结:

    1.native:

          a. 修饰的方法属于本地方法,  

          b. 通常是由C语言实现, JAVA代码中只用来调用 

          c. JAVA代码中如果调用,实际上是调用系统中的C语言编写的Dll文件

     2.hashCode()

          a. 是将对象通过哈希算法计算为一组散列

          b. 主要用于查找优化,比如Set这种不可重复的容器

          c. 例如Set插入操作: 如果进行equals操作,可以先进行hashCode进行判断, 如果不一致则插入,如果一致再进行equals比较

              d.hashCode相等不代表equals相等;   equals相等则hashCode必相等

          e. 优化: 对象比较,  可以先判断hashCode是否相等,  如果不等则直接操作(例Set.put),如果相等再调用equals , 可以大大

              减少equals的调用次数

     3.equals()

          a. 用来对比对象是否相等

          b. 建议所有对象都重写equals方法

          c. 建议一同重写hashCode  

     4.clone()

           a.克隆方法为了解决对象互相引用问题

           b.克隆分浅度克隆、深度克隆

           c.Object提供的是浅度克隆

           d.浅度克隆的对象内部的非基础类型(如String)还是指向同一地址

           e.深度克隆需要实现Cloneable接口,并重写clone,首先调用Object.clone进行浅克隆,然后把克隆对象内的非基础类型属性

               再依次克隆一次才可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值