首页 > 其他 > 详细

一、Object的介绍

时间:2020-08-30 19:32:39      阅读:72      评论:0      收藏:0      [点我收藏+]

一、java.lang.Object简介

    Object 类位于java.lang包中,该包中的类是java最核心、最基础的类,使用时无须手动导入,在编译的时候回自动导入。

    Object 是所有类的超类,所有对象(包括数组)都实现了Object的方法。该类的结构图如下图所示:

技术分享图片

 

 

二、成员方法介绍

1、registerNatives()

private static native void registerNatives();
    static {
        registerNatives();
    }

  该类使用 static 修饰,是静态方法,同时在静态代码块中调用。同时使用了 native 修饰,表明它是一个本地方法,本地方法与java方法不同的是,本地方法不是由java语言编写,而是由C或C++语言编写,保存于动态链接库中,是各个平台专有的实现方法。java通过虚拟机实现了跨平台,虚拟机加载了包含本地方法的动态链接库,从而能够在java中调用本地方法,java内存结构中有一个本地方法栈专门用于保存本地方法。本地方法是连接java程序和底层主机操作系统的连接方法。

       不光在 Object 类中有 registerNatives() 方法,在System、ClassLoader、Thread、Class 等类中也存在 registerNatives() 方法,它的作用是将本地方法直接链接到调用方,java程序调用本地方法时就可以直接使用,不用虚拟机再定位并链接。

技术分享图片

 

 

 

 

2、getClass()

public final native Class<?> getClass();

  该方法使用了 final 修饰,表示该方法不能被子类重写。同样它是一个本地方法,返回了该对象的运行时类。

3、hashCode()

public native int hashCode();

  该方法是一个本地方法,返回了对象的int型哈希码值(根据对象的内部地址转换得出),这个方法是为了支持哈希表,例如HashMap中的使用。

  该方法的原则是:

  1.在同一应用程序中同一对象多次调用该方法(不论怎么修改对象的属性),必须返回的相同的整形哈希码值,不同应用程序中没有要求;

  2.如果根据equals方法判断对象是否相等,则两个对象调用hashCode() 必须返回相同的整形结果;

  3.不要求两个对象通过equals判断不相等,则两个对象hashCode应返回不同值。

4、equals()

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

  该方法用于比较两个对象是否相等,使用的是“==”,比较的是对象的引用地址。该方法被重写时,hashCode() 也应该被重写。

  equals在非空对象使用上存在的等价关系:

  1.自反性:对于任何非空对象x、y,,x.equals(x) 应当返回 true;

  2.对称性:对于任何非空对象x、y,若 x.equals(y) 为 true,则 y.equals(x) 也为 true;

  3.传递性:对于任何非空对象x、y、z,若x.equals(y) 为 true,y.equals(z) 为 true,则x.equals(z) 为 true;

  4.一致性:对于任何非空对象x、y,多次调用x.equals(y)的结果始终是一样的;

  5.对于任何非空对象x,x.equals(nulll) 为 false。

5、clone()  

protected native Object clone() throws CloneNotSupportedException;

  该方法是本地方法,用于返回当前对象的副本。

  即 y = x.clone(),结果 x != y,但是 x.getClass() = y.getClass()。通常希望是 x.equals() = y.equals(),因此需要重写 equals 方法。

  该方法实现的是“浅拷贝”而不是“深拷贝”。对于组合对象来说,其内部对象如(String类型就没有实现Cloneable接口)的拷贝是引用地址的拷贝而不是值得拷贝。

  Object 类本身没有实现Cloneable接口,使用该方法需要实现Cloneable接口,否则调用时会报CloneNotSupportedExceptiony异常。

6、toString()

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

  该方法返回的是 当前对象所属类的名称 + “@” + 哈希码的十六进制形式 的字符串。

7、toString()

public final native void notify();

8、notify()

public final native void notify();

  随机唤醒一个在该对象上等待的线程。

9、notifyAll()

public final native void notifyAll();

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

10、wait()

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

  导致当前线程在该对象上等待,知道另一个线程调用该对象的notify()方法或者notifyAll()方法,或者当前时间已过。

11、finalize()

protected void finalize() throws Throwable { }

  当垃圾回收器将要回收对象所占内存时被调用。

  它的调用具有不确定性,只保证方法会调用,但不保证方法里的任务会被执行完。

一、Object的介绍

原文:https://www.cnblogs.com/guaniu2750/p/13585923.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!