`
chendewei2401
  • 浏览: 9737 次
  • 性别: Icon_minigender_1
  • 来自: 临沂
社区版块
存档分类
最新评论

JDK源码阅读----java.lang.Object

    博客分类:
  • J2SE
 
阅读更多

1.  private static native void registerNatives();
    static {
        registerNatives();
    }
     为使JVM能将java的本地方法与C中的具体实现相关联,C中方法的命名必须遵循一定规则,如java.lang.Object.registerNatives对应的C中的实现方法名应为java_lang_Object_registerNative,通过定义本地方法registerNatives,我们可以在C的实现代码中任意命名相对应的方法名,如hashcode在OpenJDK中C的实现为JVM_IHashCode
2.public final native Class<?> getClass();
     该方法返回的是该对象运行时类的Class对象。对于每个被加载的类型,jvm都会为它创建一个java.lang.Class类的实例,在方法区中存储此类的类型信息和一个指向类实例的引用,该引用把这个实例和存储在方法区中的类型数据关联起来。因此get到的Class对象内包含的就是此类的类型信息。
3.public native int hashCode();
     返回该对象的哈希值。支持此方法是为了提高哈希表的性能。但只有对象存储在HashSet,HashMap,HsahTable等以hash表为工作机制的容器的时候,才需要关心这个函数。
      hashcode常规规范规定hashcode必须满足:对象相同则哈希值必定相同,但哈希值相同对象可以不同。其中的一种本地方法实现是将对象内存通过hash算法映射成hashcode,这样对象相同则哈希值必等,若出现不同对象的哈希值相等,就称为hash冲突。现在hashMap解决hash冲突使用了链表法(hashMap.get)。其他的还有开放地址法,再哈希法及公共溢出区法等等。
4.  public boolean equals(Object obj) {
      return (this == obj);
    }
     当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,即相等对象必须具有相等的哈希码。
5.protected native Object clone() throws CloneNotSupportedException;
     该方法用于对象的拷贝,它会把该对象在堆上所占内存空间拷贝一份形成一个新的对象。每个对象的堆上都存储有一个指向方法区中其类型信息的指针,而JVM通过这个指针来判断一个对象的类型,由于只是简单的将对象的空间进行复制,所以它们具有相同的类型,即obj.clone().getClass()==obj.getClass()。另外,若类具有引用类型的实例变量的话,也只是对这个引用进行拷贝,并不复制其引用的对象。所以拷贝对象的引用与原对象的指向相同的对象,即为“浅拷贝”。可通过循环拷贝,以实现拷贝对象和原对象不能相互影响的“深拷贝”。 
     该方法是protected,因而所有实现了Cloneable接口的java类可来调用该方法。
6.   public String toString() {
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
     返回一个由类名和此对象哈希值的无符号十六进制表示组成。
7.public final void wait() throws InterruptedException
 public final native void wait(long timeout) throws InterruptedException
 public final void wait(long timeout, int nanos) throws InterruptedException
     在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。当前线程必须拥有此对象的对象锁,即wait()方法必须写在同步模块(synchronized)中。
   public final native void notify();
  public final native void notifyAll();
     唤醒在此对象同步模块上等待的单个或所有线程。
8.protected void finalize() throws Throwable { }
     用户可以自己调用对象的finalize方法,但是这种调用是正常的方法调用,和对象的销毁过程无关。而JVM保证在一个对象所占用的内存被回收之前,如果它实现了finalize方法,则该方法一定会被调用。Object的默认finalize什么都不做。
分享到:
评论

相关推荐

    修改版json-lib-2.4-jdk14与json-lib-2.4-jdk13 支持JDK1.4与1.3与1.5

    remove是java.lang.ThreadLocal类的方法,但是jdk1.4中,却没有这个方法的实现,jdk1.5中有这个方法,因此是没问题的; 本jar包经过改造,适用于JDK1.4,需要第三方JAR包的支持(commons-beanutils-1.8.2.jar,commons...

    java.lang.object源码-finalize-:个人博客(http://bit.ly/javafinalize)上java.lang

    java.lang.object原始码最终不推荐使用java.lang.Object.finalize() 我的博客文章中的示例的Gradle源代码存储库。 在Linux Mint(SUSE Linux)上构建和测试。 由于gradle当前不支持Java 11,因此可以使用标准Java...

    jdk源码(完整版)

    总之,JDK源码的完整版为Java开发者提供了一个宝贵的资源,能够深入理解Java平台的运作机制,从而提升编程技能和解决问题的能力。通过研究`javax`、`com`、`org`、`jdk`、`java`、`launcher`、`sun`等包下的源代码,...

    json-lib-2.4-jdk14.jar

    remove是java.lang.ThreadLocal类的方法,但是jdk1.4中,却没有这个方法的实现,jdk1.5中有这个方法,因此是没问题的; 本jar包经过改造,适用于JDK1.4,需要第三方JAR包的支持(commons-beanutils-1.8.2.jar,commons-...

    jdk1.8 rt.jar 源码

    1. **基础类库**:`java.lang`包是所有Java程序的基础,包含如`Object`、`String`、`Class`等核心类。通过源码,你可以看到它们的构造函数、方法实现,了解对象创建、字符串操作等底层细节。 2. **集合框架**:`...

    JDK-proxy-mode-spring-source-code-.zip_spring code

    JDK代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。下面将详细解析这些知识点。 首先,`InvocationHandler`接口是JDK代理的核心,它定义了一个方法`invoke(Object proxy,...

    jdk8源码(jdk-687fd7c7986d)

    在Java编程领域,深入理解JDK源码是提升技术能力的重要途径。JDK8是Java发展过程中的一个重要里程碑,引入了许多创新特性,如Lambda表达式、Stream API以及日期时间API的改进等。本次我们将主要探讨解压后的`jdk-687...

    javajdk源码学习-JavaSourceLearn:JDK源码学习

    jdk源码学习 JavaSourceLearn 版本号 版本 corretto-1.8.0_275 方式 逐步阅读源码添加注释、notes文件夹添加笔记 计划学习任务计划 标题为包名,后面序号为优先级1-4,优先级递减 java.lang Object 1 String 1 ...

    java JDK 源码

    4. **java**: 这是最基础的包,包含Java语言的核心类,如`java.lang`有Object、String、System等基本类型和类,`java.util`提供了集合框架、日期时间、随机数生成等功能,`java.io`则涉及输入输出流操作。...

    javajdk源码学习-jdk-source-code:此存储库用于OracleJDK源代码的阅读和学习

    Java JDK源码是Java开发的核心,它包含了Java平台标准版(Java SE)的所有核心类库源文件。Oracle JDK是Java开发工具包的一个实现,由Oracle公司提供,是开发者理解和研究Java语言的重要资源。本存储库提供了Oracle ...

    java jdk1.8 源码

    Java JDK 1.8源码是Java开发工具包的一个重要组成部分,它包含了Java语言的核心类库,对于深入理解和学习Java编程语言以及其运行机制至关重要。源码提供了对JVM(Java虚拟机)、类库和API的直接洞察,帮助开发者探究...

    JDK7源码 包含rt.jar包下的 sun包源码 sun.security包等源码

    `javax`、`com`、`org`、`java`等包则包含了Java标准库中的公共API,例如`java.lang`包下的基础类如`Object`、`String`,`java.util`包中的集合框架,以及`javax.swing`和`javax.servlet`等用于图形用户界面和Web...

    JDK 源码 java

    4. **java**:这是Java核心库的一部分,包含了语言基础类,如`java.lang`中的`String`、`Integer`等基本类型包装类,以及`Object`、`Class`等基础类;还有`java.io`的输入/输出操作,`java.util`的集合框架,`java....

    javajdk源码学习-javaSource:JDK源码学习

    在Java开发领域,深入理解JDK源码是提升技能的关键步骤。JDK(Java Development Kit)是Oracle公司提供的Java编程语言开发工具集,包含了Java运行环境、编译器以及各种工具和API。源码学习可以帮助我们更好地理解...

    javajdk源码学习-java-source-code:JavaJDK源代码学习笔记

    首先,Java JDK源码包含了Java语言的基础类库,如`java.lang`, `java.util`, `java.io`等包,这些包提供了大量的类和接口,构成了Java开发的基本框架。例如,`java.lang.Object`是所有Java类的父类,它定义了一些...

    jdk1.6的rt.jar的源码

    1. `java.lang.Object`:所有Java类的基类,定义了对象的基本行为,如`equals()`、`hashCode()`和`toString()`。 2. `java.util.ArrayList`和`java.util.HashMap`:集合框架的两个重要实现,分别代表动态数组和哈希...

    jdk 源码 完整版

    这个包是Java语言最基础的部分,包含了语言的关键类库,如`java.lang`中的Object、String、Integer等基本类型和系统类,`java.io`中的输入/输出流操作,`java.util`中的集合框架,以及`java.awt`和`javax.swing`用于...

    java jdk 1.6 src.zip 源码

    4. `java`: 这是Java标准库的核心源代码,包括`java.lang`、`java.util`、`java.io`等基础包,涵盖了Java语言的基本数据类型、集合、输入/输出、网络编程等核心功能。 5. `com`: 这个目录主要包含Sun Microsystems...

    JDK源码,整合所有内容

    - **对象和类**:Java是面向对象的语言,类是其核心,JDK源码中包含了大量内置类,如`Object`、`String`、`Exception`等。 - **接口与多态**:`interface`定义了类的行为规范,多态性是Java的一大特性,体现在方法...

    Java rt.jar源码

    例如,`java.lang`包中的`Object`类是所有Java类的基类,包含了一些通用的方法如`toString()`、`equals()`和`hashCode()`;`java.io`包提供了I/O流的抽象,支持文件操作和网络数据传输;`java.util`包则包括了各种...

Global site tag (gtag.js) - Google Analytics