【前端学java】java中的Object类(8)
往期回顾:
- 【前端学java】JAVA开发的依赖安装与环境配置 (0)
- 【前端学 java】java的基础语法(1)
- 【前端学java】JAVA中的packge与import(2)
- 【前端学java】面向对象编程基础-类的使用 (3)
- 【前端学java】类中的访问权限详解,通俗易懂(4)
- 【前端学java】java中final修饰符(5)
- 【前端学java】全网最通俗易懂的JAVA抽象概念(6)
- 【前端学java】Java中的接口和枚举概念(7)
引言-前端原型Object回顾
在前端中,每一个对象都继承了原型链顶层Object原型对象上的所有方法,如hasOwnProperty()方法。
let person = {name:'shixiaoshi',
}
if(!person.hasOwnProperty('age')){person.age = 18
}
上述代码中,person对象的hasOwnProperty方法继承自其顶层对象Objec原型对象上的方法。
在Java中,Object是所有类的根类,这一点和前端的概念也基本是一致的。
普通类的隐式继承
我们先看一段基础代码
上述代码中,我们定义了一个Person类,并在主类中打印其name属性的值。
在Java中,所有类都隐式地继承自Object类,因此,上述代码其实可以这么写:
package 类与对象;public class Object_01 {public static void main(String[] args) {Person obj = new Person();System.out.println(obj.name);}
}class Person extends Object{String name = "shixiaoshi";
}
基于这种规则,我们还可以在Object_01类中引用Person类时,使用Object来指明其类型。如
package 类与对象;public class Object_01 {public static void main(String[] args) {// 使用Object指明 obj类型Object obj = new Person();}
}class Person extends Object{String name = "shixiaoshi";
}
但注意,使用 Object指明obj类型时,obj继承的是Object上的所有方法,Person类上的方法或属性会丢失
如图,我们使用Object约束obj时,编译器已经无法识别其name属性,给出的提示都是Object类定义了一些通用的方法,如toString()方法等。
Object类的来源
我们在编译器里单击Object, 可以定位到Object类定义的位置
如图,我们可以知道Object定义在java.lang包里,是这个包里定义的类
Object类的通用方法
Object类定义了一些通用的方法,这些方法在所有的Java对象中都可以使用。
以下是Object类中常用的方法(不用记,了解有这些东西就行)
- toString() :返回对象的字符串表示形式。默认情况下,该方法返回对象的类名和哈希码的十六进制表示。
- equals(Object obj) :用于判断两个对象是否相等。默认情况下,equals() 方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。在自定义类中,可以重写equals() 方法来定义对象的相等性比较规则。
- hashCode() :返回对象的哈希码。哈希码用于在哈希表等数据结构中快速定位对象。
- getClass() :返回对象的运行时类(Runtime Class),即对象所属的类的Class对象。
- notify() 和notifyAll() :用于在多线程编程中实现线程间的通信。这两个方法用于唤醒等待中的线程。
- wait() :用于在多线程编程中实现线程的等待。调用该方法会使当前线程进入等待状态,直到其他线程调用notify() 或notifyAll() 方法唤醒它。
- clone() :用于创建并返回对象的副本。默认情况下,clone() 方法执行的是浅拷贝。如果需要实现深拷贝,需要在自定义类中重写该方法。
- finalize() :用于垃圾回收器在回收对象之前执行一些清理操作。但由于这个方法在Java 9中被废弃,不推荐使用。
Object类是Java中所有类的祖先,它提供了一些通用的方法,可以在所有Java对象中使用。但在实际开发中,我们通常不直接使用Object类,而是使用它的子类,因为它的子类会提供更具体的功能和行为。
接下来,我们学习一些简单的方法,再加深下对Object的理解
toString
我们先来看一段代码
上述代码中,我们将Obj通过toString()方法转换成了字符,并打印出了 其结果。
现在,我们简单介绍下toString()方法的作用:
toString()方法可以将对象转换成字符串,其打印的地址就是对象的默认内存地址。
内存地址的概念和前端中是一样的,这里涉及到深浅拷贝,值引用和对象引用等概念,这些概念不熟悉的同学快下去复习吧
为了更直观的理解打印的内容,我们可以将这个方法进行重写,我们先准备如下代码
package 类与对象;public class Object_01 {public static void main(String[] args) {// 使用Object指明 obj类型Object obj = new Person();System.out.println(obj.toString());}
}class Person {}
鼠标放到Person类里面,点击ctrl + o ,可以快速改写代码
上述代码的运行结果自然是打印出了我们自定义的内容
注意:“My name is “+name+”” 中的 “+name+” 是java中字符拼接的方法
hashCode
这个方法用于返回对象的内存地址(和toString方法效果一致)
package 类与对象;public class Object_01 {public static void main(String[] args) {// 使用Object指明 obj类型Object obj = new Person();// toString 方法System.out.println("tosrting方法" + obj.toString());// hashCode 方法System.out.println("hashCode方法" + obj.hashCode());}
}
class Person { }
运行结果
可能你会有疑问,74a14482的内存地址和1956725890的内存地址不一致啊,实际上,一个是16进制,一个是10进制的显示而已
equals
用于判断两个对象是否相等。默认情况下,equals() 方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。
我们先看一个简单例子
package 类与对象;public class Object_01 {public static void main(String[] args) {// 使用Object指明 obj类型Object obj = new Person();// equals 方法System.out.println(obj.equals(new Person())); // 打印结果是false}
}
class Person { }
这个打印结果告诉我们,obj 和new Person()不是一模一样的东西。
行了,我们就探究这么多,后面通过其他demo继续扩充我们的知识体系!!
相关文章:

【前端学java】java中的Object类(8)
往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学 java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类的使用 (…...

TensorFlow实战教程(二十六)-什么是生成对抗网络GAN?基础原理和代码普及
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM、BiLSTM、BiLSTM+Attention和CNN、TextCNN。这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN、常用算法(CGAN、DCGAN、…...
IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven依赖管理,版本号管理,继承和聚合
第一章 Maven的依赖管理 1.1 依赖范围 依赖语法:<scope> compile【默认值】:在main、test、Tomcat【服务器】下均有效。test:只能在test目录下有效 junit provided:在main、test下均有效,Tomcat【服务器】无效…...

OpenVPN Connect使用连接公网VPN服务器实现内网穿透
安装并运行OpenVPN Connect 点击AGREE 添加配置.OVPN文件 点击连接 连接成功 两个内网主机通过公网VPN穿透...

Redis(集合Set和有序集合SortedSet)
SET集合中的元素是不允许重复的,SET中的命令都是以S开头的。 使用SADD 在集合中添加元素,使用SMEMBERS查看元素。 当添加重复元素时,会返回0代表添加失败,查询还是就Redis一个元素。 使用SISMEMBER查询元素是否在集合中ÿ…...

黔院长 | 《黄帝内经》——奇病论!
世界之大,无奇不有,就连病症也是如此,近年更是新增各类奇形怪状的疾病,今天就带大家一同走进《黄帝内经》的奇病篇,一起了解部分罕见的疾病及其特征! “奇病论”当中提到,有些妇女怀孕到第九个月…...

手撕单链表(C语言)
目录 1.单链表的物理结构 2.头文件的实现 3.SList.c文件的实现 3.1尾插、创建节点 3.2打印 3.3头插 3.4尾删 3.5头删 3.6查找 3.7指定位置之前插入数据 3.8指定位置之后插入数据 3.9删除指定位置节点 3.10删除pos之后的节点 3.11销毁链表 4 所有的代码 1.单链表的物理结构 众所…...

60 权限提升-MYMSORA等SQL数据库提权
目录 数据库应用提权在权限提升中的意义WEB或本地环境如何探针数据库应用数据库提权权限用户密码收集等方法目前数据库提权对应的技术及方法等 演示案例Mysql数据库提权演示-脚本&MSF1.UDF提权知识点: (基于MYSQL调用命令执行函数)读取数据库存储或备份文件 (了…...

【C++上层应用】2. 预处理器
文章目录 【 1. #define 预处理 】【 2. #ifdef、#if 条件编译 】2.1 #ifdef2.2 #if2.3 实例 【 3. # 和 ## 预处理 】3.1 # 替换预处理3.2 ## 连接预处理 【 4. 预定义宏 】 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是…...

ISP--Black Level Correction(黑电平矫正)
图像的每一个像素点都是由一个光电二极管控制的,由二极管将电信号,转换为数字信号。 那么,我们知道了,图像的像素值是与电信号强度相关的。但是,我们得知道,每一个光电二极管要想工作,都得有一定…...
python项目源码基于django的宿舍管理系统dormitory+mysql数据库文件
基于Django的宿舍管理系统 运行效果 个人亲自制作python项目源码基于django的宿舍管理系统dormitorymysql数据库文件 1. 介绍 宿舍管理系统是一个基于Django框架开发的项目,旨在简化和优化宿舍管理的流程。该系统包括学生和管理员两个角色,学生可以通过…...
Java和 JS 的10大不同之处,你清楚吗?
还记得刚开始学习编程时,我就在想:“Java和JavaScript是同一种语言吗?”。就是因为看到它们名称中都带“java”,所以才会误以为它们有关系。实际上,它们并没有太大的联系。 这两者的关系,就和英语与斯瓦希…...

vue动态配置路由
文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发,可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题 路由…...

科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?
科技云报道原创。 最简单的方式,往往是最有效的,勒索软件攻击就属于这类。 近两年,随着人类社会加速向数字世界进化,勒索软件攻击成为网络安全最为严重的威胁之一。今年以来,勒索软件攻击在全球范围内呈现快速上升态…...
通过bat命令启动jar后缀软件
要通过bat命令启动一个带有.jar后缀的软件,可以使用以下的bat文件命令: echo off java -jar "路径\文件名.jar" pause请将路径\文件名.jar替换为实际的文件路径和文件名。例如,如果你的文件位于C:\Program Files\MyApp\app.jar&am…...
Python选择排序和冒泡排序算法
选择排序和冒泡排序都是常见的排序算法。以下是这两种算法的Python实现: 选择排序(Selection Sort) 选择排序的基本思想是在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然…...

集合的自反关系和对称关系
集合的自反关系和对称关系 一:集合的自反关系1:原理:2:代码实现 二:对称关系1:原理:2:代码实现 三:总结 一:集合的自反关系 1:原理: …...

传递函数的推导和理解
传递函数的推导和理解 假设有一个线性系统,在一般情况下,它的激励 x ( t ) x(t) x(t)与响应 y ( t ) y(t) y(t)所满足的的关系,可用下列微分方程来表示: a n y ( n ) a n − 1 y ( n − 1 ) a n − 2 y ( n − 2 ) ⋯ a 1 y…...

STM32 SPI
SPI介绍 SPI是Serial Pepheral interface缩写,串行外围设备接口。 SPI接口是一种高速的全双工同步通信总线,已经广泛应用在众多MCU、存储芯片、AD转换器和LCD之间。大部分STM32有3个SPI接口,本实验使用的是SPI1。 SPI同一时刻既能发送数据&…...

Linux系统编程 day02 vim、gcc、库的制作与使用
Linux系统编程 day02 vim、gcc、库的制作与使用 01. vim0101. 命令模式下的操作0102. 切换到文本输入模式0103. 末行模式下的操作0104. vim的配置文件 02. gcc03. 库的制作与使用0301. 静态库的制作与使用0302. 动态库(共享库)的制作与使用 01. vim vim是一个编辑器࿰…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...