热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Java新手进阶指南】——深入解析顶级类Object的源码实现

本文将深入探讨Java编程语言中顶级类`Object`的源码实现,旨在为Java新手提供进阶指导。`Object`类是所有Java类的基类,了解其内部机制对于提升编程技能至关重要。文章首先介绍了API文档的使用方法,这对于有开发经验的Java程序员来说是不可或缺的工具。通过详细解析`Object`类的关键方法和属性,读者可以更好地理解Java的核心原理和设计思想。此外,文章还提供了实际代码示例,帮助读者在实践中掌握这些知识。

首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~

java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到以下的:


下载自己喜爱的版本号就可以,解压,点击~/jdk-7u60-apidocs/api/index.html就能够查看其api了:


跟上网一样一样的,点击对应链接就能够查看其信息了。


进入正题,说说Object这个类:

先奉上去掉凝视的源代码:能够看到这里面出现了非常多nativekeyword,这个前面也有介绍,它是调用本地的方法,这边说得直白一点,就是调用jvm底层的方法,也是C/C++方法的,我们知道,jvm非常大程度上是依赖于C/C++开发出来的~

package java.lang;public class Object {private static native void registerNatives();static {//静态块,默认调用registerNatives()方法registerNatives();}

//返回执行时的Class,一般在反射过程中用的比較多

public final native Class getClass();

//得到jvm执行时的hash值public native int hashCode();

//比較方法,两个对象进行比較public boolean equals(Object obj) {return (this == obj);}

//克隆方法protected native Object clone() throws CloneNotSupportedException;

//转换成String,这个就说明了为什么我们在打印对象的时候,控制台会看到xx@xxx的信息,事实上是调用的是这种方法public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}

//唤醒线程,即唤醒某个处于睡眠的线程——>对象的线程public final native void notify();

//唤醒线程,即唤醒全部处于睡眠的线程——>对象的线程public final native void notifyAll();

//线程休眠等待public final native void wait(long timeout) throws InterruptedException;

//线程休眠等待public final void wait(long timeout, int nanos) throws InterruptedException {if (timeout <0) {throw new IllegalArgumentException("timeout value is negative");}if (nanos <0 || nanos > 999999) {throw new IllegalArgumentException("nanosecond timeout value out of range");}if (nanos >&#61; 500000 || (nanos !&#61; 0 && timeout &#61;&#61; 0)) {timeout&#43;&#43;;}wait(timeout);}

//线程休眠等待public final void wait() throws InterruptedException {wait(0);}

//GC回收&#xff08;垃圾回收&#xff09;收尾工作protected void finalize() throws Throwable {}
}
解释如上&#xff0c;会有下面一些问题&#xff1a;

1、为什么会用到native这个词&#xff1f;

这个还真不好回答&#xff0c;先来介绍java的一门技术——JNI&#xff08;Java Native Interface&#xff09;&#xff0c;这个的出现非常大程度上是丰富了java语言的&#xff0c;它同意java语言调用其它语言的东东&#xff0c;有一些java不好实现的东东&#xff0c;就能够使用其它语言进行实现&#xff0c;然后供给java调用。上面出现这么多native方法&#xff0c;说得难听一点就是java实现不了的功能&#xff0c;在JVM层次使用了C\C&#43;&#43;实现了&#xff0c;丰富了java应用层的api。

2、finalize()方法&#xff1f;

这个是要跟GC结合来说明&#xff0c;后面会重点介绍~

3、非常多方法声明为final&#xff1f;

声明为final的方法表示终结&#xff0c;不能被重写~即方法的作用功能不能进行改动



转:https://www.cnblogs.com/bhlsheji/p/4381411.html



推荐阅读
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了Java中的注解功能,包括如何定义注解类型、设置注解的应用范围及生命周期,并通过具体示例展示了如何利用反射机制访问注解信息。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
author-avatar
朱玉龙1977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有