一篇文章带你彻底了解Java Object类

news2024/11/23 11:27:52

一篇文章带你彻底了解Java Object类

​ 在Java的世界中,有一个神秘的存在,它是所有类的根基,无所不在,无所不知。它就是——Object类。本文将带你深入探索Java中这个神秘之源,解密Object类的奥秘,让你更好地理解和使用Java的核心概念。

基本概念:

Object类是Java中所有类的超类(父类)。无论你创建了哪个类,你都在某种程度上间接地继承了Object类的属性和方法。它是Java中的根基,一切皆对象,一切皆从Object而来。

子类可以使用 Object 的所有方法

img

Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。


Object 类可以显式继承,也可以隐式继承,以下两种方式是一样的:

显式继承:
public class Runoob extends Object{

}
隐式继承:
public class Runoob {

}

类的构造函数

序号构造方法 & 描述
1**Object()**构造一个新对象。

类的方法

序号方法 & 描述
1protected Object clone()创建并返回一个对象的拷贝
2boolean equals(Object obj)比较两个对象是否相等
3protected void finalize()当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
4Class getClass()获取对象的运行时对象的类
5int hashCode()获取对象的 hash 值
6void notify()唤醒在该对象上等待的某个线程
7void notifyAll()唤醒在该对象上等待的所有线程
8String toString()返回对象的字符串表示形式
9void wait()让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
10void wait(long timeout)让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
11void wait(long timeout, int nanos)与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。

Object类的重要方法:equals和hashCode

Object类提供了一些重要的方法,其中最常用的是equals()hashCode()方法。equals()方法用于比较两个对象是否相等,而hashCode()方法返回对象的哈希码。这两个方法在Java的集合框架中扮演着重要角色,影响着对象的相等性判断和存储方式。

public class ObjectExample {

    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println(str1.equals(str2)); // 输出 true

        System.out.println(str1.hashCode()); // 输出哈希码
        System.out.println(str2.hashCode());
    }
}

输出结果:

true
69609650
69609650

上面的示例演示了如何使用equals()方法比较两个对象的相等性,并使用hashCode()方法获取对象的哈希码。

Object类的常用方法:toString和getClass

除了equals()hashCode()方法外,Object类还提供了其他常用的方法。其中,toString()方法返回对象的字符串表示,通常用于调试和日志记录。getClass()方法返回对象的类类型。

public class ObjectExample {

    public static void main(String[] args) {
        String str = "Hello, Object!";
        System.out.println(str.toString()); // 输出字符串表示

        System.out.println(str.getClass()); // 输出类类型
    }
}

输出结果:

Hello, Object!
class java.lang.String

上述示例演示了如何使用toString()方法获取对象的字符串表示,以及如何使用getClass()方法获取对象的类类型。

自定义类与Object类

每个Java类都直接或间接地继承了Object类。如果你没有明确指定一个类的父类,那么它默认继承自Object类。这意味着,你可以在自定义的类中使用Object类的方法,或者覆盖这些方法以满足特定需求。

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               '}';
    }

    public static void main(String[] args) {
        Person person = new Person("Alice");
        System.out.println(person); // 输出对象的字符串表示
    }
}

输出结果:

Person{name='Alice'}

在上述示例中,我们自定义了一个Person类,并覆盖了Object类的toString()方法,以自定义的方式返回对象的字符串表示。

Object类的多态性

Object类的存在赋予了Java类的多态性。由于每个类都继承自Object类,所以你可以将任何类的对象视为Object类型,从而实现通用的操作和存储。

public class ObjectPolymorphism {

    public static void printClassName(Object obj) {
        System.out.println("对象的类名:" + obj.getClass());
    }

    public static void main(String[] args) {
        String str = "Hello, Object!";
        printClassName(str);

        Integer num = 42;
        printClassName(num);
    }
}

输出结果:

对象的类名:class java.lang.String
对象的类名:class java.lang.Integer

上述示例展示了Object类的多态性,通过传递不同类型的对象给通用方法,实现了通用的操作。

总结

Object类是Java中的根基,它为所有类提供了共同的属性和方法。通过掌握equals()hashCode()toString()等方法,你能够更好地理解和操作对象。Object类的存在让Java的世界变得更加统一、灵活,为你的编程之旅赋予了更多可能性。

作者:Stevedash

发表于:2023年8月9日00点31分

注:本文内容基于个人对Java Object 类 | 菜鸟教程 (runoob.com)学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

粒子群算法运行时间太长怎么办?—教你一招降低94%的运行时间

不管是初学者还是精通智能优化算法(粒子群算法,遗传算法等)的朋友,相信你们都对智能优化算法运行之慢深有体会,对于比较复杂的问题,经常出现运行一次几小时,调试一次几小时的情况。调试了这么多年代码,智能…

数仓架构模型设计参考

1、数据技术架构 1.1、技术架构 1.2、数据分层 将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层&#xff…

IoTDB原理剖析

一、介绍 IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB采用轻量式架构,具有高性能和丰富的功能。 IoTDB从存储上对时间序列进行排序,索引和chunk块存储,大大的提升时序…

wireshark 安装和使用

wireshark,世界上最受欢迎的网络协议分析器。是一个网络流量分析器,或“嗅探器”,适用于Linux、macOS、*BSD和其他Unix和类Unix操作系统以及Windows。它使用图形用户界面库Qt以及libpcap和npcap作为数据包捕获和过滤库。 wireshark&#xff…

MyBatis 缓存机制复习及项目中的应用经历

背景 想起前两年工作中因为二级缓存默认开启导致的问题,完整的看了一个介绍 MyBatis 缓存机制的视频《MyBatis 缓存基础知识讲解》。 总计知识点: 缓存的类型及开关这是个形同虚设的功能,线上环境应该禁用缓存 MyBatis 缓存分类 MyBasit…

AWD攻防学习总结(草稿状态,待陆续补充)

AWD攻防学习总结 防守端1、修改密码2、备份网站3、备份数据库4、部署WAF5、部署文件监控脚本6、部署流量监控脚本/工具7、D盾扫描,删除预留webshell8、代码审计,seay/fortify扫描,漏洞修复及利用9、时刻关注流量和积分信息,掉分时…

yolov2检测网数据集标注_labelme使用_json2txt格式转换

yolov2检测网数据集标注_labelme使用_json2txt格式转换 一、安装Anaconda二、创建labelme虚拟环境三、使用labelme标注健康非健康猫狗数据3.1 打开数据集所在文件夹3.2 进行标注数据集3.3 json2txt3.4 按文件目录和训练测试数据集重分配 四、数据喂给服务器网络参考链接 一、安…

容器安装Nginx

文章目录 容器安装nginx下载安装容器1、安装docker容器2、安装nginx3、容器运行nginx结果 容器安装nginx 下载安装容器 1、安装docker容器 yum makecache fast # 更新yum缓存 yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.…

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

文章目录 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】前言探究隐藏网络端口netstat分析隐藏网络端口的原理关键数据结构隐藏网络端口源码 效果演示 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】 前言 Rookit是个老生常谈的话…

微服务服务拆分和远程调用

一、服务架构比较 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目&#x…

鉴源实验室丨汽车网络安全运营

作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 概 述 1.1 背景 随着车辆技术的不断进步和智能化水平的提升,车辆行业正经历着快速的变革和技术进步。智能化…

C/C++内存管理:解析分配、释放与优化

目录 引言 一、栈与堆内存 1.1 栈内存 1.2 堆内存 1.3 示例 C示例 C示例 二 、C语言内存管理方式 2.1 malloc函数 介绍 用法示例 原理剖析 2.2 calloc函数 介绍 用法示例 原理剖析 2.3 realloc函数 介绍 解释 作用 用法示例 原理剖析 2.4 free函数 介…

tidevice+appium在windows系统实施iOS自动化

之前使用iOS手机做UI自动化都是在Mac电脑上进行的,但是比较麻烦,后来看到由阿里开源的tidevice工具可以实现在windows上启动WDA,就准备试一下,记录一下过程。 tidevice的具体介绍可以参考一下这篇文章:tidevice 开源&…

上传图片视频

分布式文件系统MinIo MinIO提供多个语言版本SDK的支持,下边找到java版本的文档: 地址:https://docs.min.io/docs/java-client-quickstart-guide.html MinIO测试(上传、删除、下载) public class MinioTest {MinioC…

JavaScript中的交互的方式alert,prompt,confirm的用法

一.alert的用法 1.alert 它会显示一条信息,弹出的这个带有信息的小窗口被称为模态窗。“modal” 意味着用户不能与页面的其他部分(例如点击其他按钮等)进行交互,直到他们处理完窗口。在上面示例这种情况下 —— 直到用户点击“确定”按钮。 …

【二叉树】105. 从前序与中序遍历序列构造二叉树

链接: 105. 从前序与中序遍历序列构造二叉树 先序 能够确定谁是根 中序 知道根之后,能够确定左子树和右子树的范围 例子 根据先序的性质(根左右),能够确定根,我们就能够从总序中找出根节点(rooti所在…

OpenLayers实战,OpenLayers画线测量距离和画多边形测量区域面积

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现画线测量距离和画多边形测量区域面积这两个功能。 本章代码就是通过OpenLayers的图形绘制功能,通过监听绘制事件获取绘制的图形,并进行计算,就可以得到长度和面积。日常开发中比较常用,所以不废话,立…

Maven构建项目失败 Non-resolvable import POM

Maven构建项目失败 Non-resolvable import POM Non-resolvable import POM: XXX:pom:4.2.0 was not found in https://repo.maven.apache.org/maven2 during a previous attempt.项目结构定位错误解决问题打包碰到另外的问题Failed to execute goal org.springframework.boot:s…

GCC编译过程:预处理->编译->汇编->链接

目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境(IDE)进行C语言编程时,点击"编译"按钮后,整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…

CAD练习——绘制冲压件三视图

首先还是先设置咱们的绘图模板: 这是图层划分: 文字样式设置: 标注样式: 从主视图开始,首先绘制如下图形 用到的快捷指令: L:直线 O:偏移 TR:修剪 效果:…