【前端学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类中常用的方法(不用记,了解有这些东西就行

  1. toString() :返回对象的字符串表示形式。默认情况下,该方法返回对象的类名和哈希码的十六进制表示。
  2. equals(Object obj) :用于判断两个对象是否相等。默认情况下,equals() 方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。在自定义类中,可以重写equals() 方法来定义对象的相等性比较规则。
  3. hashCode() :返回对象的哈希码。哈希码用于在哈希表等数据结构中快速定位对象。
  4. getClass() :返回对象的运行时类(Runtime Class),即对象所属的类的Class对象。
  5. notify()notifyAll() :用于在多线程编程中实现线程间的通信。这两个方法用于唤醒等待中的线程。
  6. wait() :用于在多线程编程中实现线程的等待。调用该方法会使当前线程进入等待状态,直到其他线程调用notify()notifyAll() 方法唤醒它。
  7. clone() :用于创建并返回对象的副本。默认情况下,clone() 方法执行的是浅拷贝。如果需要实现深拷贝,需要在自定义类中重写该方法。
  8. 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继续扩充我们的知识体系!!

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

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

相关文章

探索人工智能领域——每日30个名词详解【day4】

目录 前言 正文 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以…

初步设计报告(框架)

前言 (简述初步设计报告编制的背景、过程及其它有关情况)(内容可根据项目的实际建设内容进行选择) 编制单位资质证明

BUUCTF [BJDCTF2020]一叶障目 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。来源:https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,解压得到一张.png图片。 解题思路: 1、在010 Editor中打开&#x…

填充每个节点的下一个右侧节点指针

题目链接 填充每个节点的下一个右侧节点指针 题目描述 注意点 给定一个 完美二叉树 解答思路 广度优先遍历一层层的遍历二叉树,将每一层节点的next指针都指向右侧节点 代码 class Solution {public Node connect(Node root) {if (root null) {return null;}…

使用drawio的图层构建更强大的图表

drawio中使用图层 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cnhttps://www.drawon.cn?useSourcecsdn内部完整的集成了drawio的所有功…

Linux常用命令——builtin命令

在线Linux命令查询工具 builtin 执行shell内部命令 补充说明 builtin命令用于执行指定的shell内部命令,并返回内部命令的返回值。builtin命令在使用时,将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时,使用…

JavaEE进阶(1)Java EE 简述(Java EE 发展历程、什么是Web开发? Web网站的工作流程、什么是框架?Java EE 框架学习概览)

目录 Java EE 简述 Java EE 发展历程 什么是Web开发? Web网站的工作流程 什么是框架 框架的定义 源于建筑行业的类比 框架的作用 Java EE 框架学习概览 1. Spring 2. Spring Boot 3. Spring MVC 4. Mybatis 框架之间的关系 Java EE 简述 Java EE是Java平台的企…

基于SpringBoot+Mybatis plus+React.js实现条件选择切换搜索功能

笔记/朱季谦 在写React前端逻辑时,经常遇到可以切换不同条件的列表查询功能,例如下边截图这样的,其实,这块代码基本都一个逻辑,可以一次性将实现过程记录下来,待以后再遇到时,直接根据笔记复用…

PgSQL技术内幕-Bitmap Index Scan

PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化,通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点:1)管理每个Bitmap的hash slot没用完时,每个Bitmap代表每个heap页中满…

在VS Code中查看Word, PDF, Excel

文章目录 vscode-pdfExcel Vieweroffice viewerVS Code神级插件 vscode-pdf 这年头连Edge浏览器都支持pdf阅读,那么VS Code不支持显然不太合适。搜索并安装vscode-pdf之后,就可以非常便捷地查看pdf文档了。vscode-pdf是基于pdf.js开发的阅读插件&#x…

计算机毕业设计python企业员工人事管理系统vue

管理员: 1.员工资料管理:查看员工列表,添加职工,修改信息(搜索员工使用模糊查询) 2.部门管理:查看部门列表,修改信息,添加新部门 3.职工考勤管理:添加&#x…

BUUCTF [BJDCTF2020]鸡你太美 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。来源: https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,解压得到两个.gif图片。 第一个gif图片: 第二个gif图片无法打开。…

vue3-响应式核心

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式核心 响应式核心 目录 响应式核心 3.1ref() 3.2computed () 3.3 reactive() 3.4 …

【代码随想录】算法训练计划27

回溯 1、39. 组合总和 题目: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的…

【Java】多线程-wait/notify

1、wait和notify Java的多线程中,线程的执行顺序和时间都是不定的。为了控制线程的调度顺序,前面我们引入了join()方法。 但是join()只能在线程执行完后,才能执行其他线程,有没有什么方法可以在线程执行顺序中来调度其他线程呢&…

CTF-PWN-小tips

文章目录 overflowscanfgetreadstrcpystrcat Find string in gdbgdbgdb peda Binary ServiceFind specific function offset in libc手工自动 Find /bin/sh or sh in library手动自动 Leak stack addressFork problem in gdbSecret of a mysterious section - .tlsPredictable …

【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索

目录 1 HAI(高性能应用服务)简介2 HAI的应用场景2.1 HAI在AI作画中的灵活性与效率2.2 深入探索LLM语言模型的应用与性能2.3 HAI支持的AI模型开发环境与工具 3 基于stable difussio的AI 绘画应用实践3.1 使用AI模型中的stable diffusion模型服务3.2 设置和…

10个好用的Mac数据恢复软件推荐—恢复率高达99%

如果您正在寻找最好的 Mac 数据恢复软件来检索意外删除或丢失的文件,那么这里就是您的最佳选择。 我们理解,当您找不到 Mac 计算机或外部驱动器上保存的一些重要文件时,会感到多么沮丧和绝望。这些文件非常珍贵,无论出于何种原因…

【寒武纪(14)】硬件系统由标量指令、向量指令、张量指令、访存指令构成

我们在文档《Cambricon-BANG-C-Developer-Guide-EN-v4.5.1》的build-in function 发现,存在三种计算:矩阵乘法、标量类型、向量。 查阅《Cambricon-BANG-C-CProgramming-Guide-CN-v1.5.0.pdf》可知,硬件系统由标量指令、向量指令、张量指令、…

vscode设置前进、后退快捷键

前言 在我们使用vscode编写程序时,经常需要在不同的文件之间跳来跳去,如果只是依靠个人记忆去操作会显得非常不方便。本文介绍如何设置vscode的前进、后退快捷键。 1 vscode设置前进、后退快捷键 点击“设置”图标,然后点击“键盘快捷方式…