【前端学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.mfbz.cn/a/169295.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

归并排序详解:递归实现+非递归实现(图文详解+代码)

文章目录 归并排序1.递归实现2.非递归实现 归并排序 时间复杂度:O ( N * logzN ) 每一层都是N,有log2N层空间复杂度:O(N),每个区间都会申请内存,最后申请的数组大小和array大小相同稳定性:稳定 …

Linux从 全栈开发 centOS 7 到 运维

Linux从 全栈开发centOS 7 到 运维 一 Linux 入门概述1.1 操作系统1.2 Linux 简介1.3 Linux 系统组成1.4 Linux 发行版1.4 Linux 应用领域1.5 Linux vs Windows 二 环境搭建【狂神说Java】服务器购买及宝塔部署环境说明为什么程序员都需要一个自己的服务器服务器如何购买买完服…

中国农业开启加速度,龙江农业迎来黄金期

​ “中国下一个发展动力将是大农业,而黑龙江大农业正在成为世界农业中心。” 在前不久举办的首届龙商大会暨中国(黑龙江)国际绿色食品产业高质量发展论坛(下文简称“论坛”)上,大北农科技集团股份有限公…

OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测

文章目录 前言一、直方图基础1.1 直方图的概念和作用1.2 使用OpenCV生成直方图1.3 直方图归一化1.3.1 直方图归一化原理1.3.2 直方图归一化公式1.3.3 直方图归一化代码示例1.3.4 OpenCV内置方法:normalize()1.3.4.1 normalize()方法介绍1.3.4.2 normalize()方法参数…

Javaweb之Ajax的详细解析

1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序,所以…

前缀和(c++,超详细,含二维)

前缀和与差分 当给定一段整数序列a1,a2,a3,a4,a5…an; 每次让我们求一段区间的和,正常做法是for循环遍历区间起始点到结束点,进行求和计算,但是当询问次数很多并且区间很长的时候 比如,10^5 个询问和10^6区间长度,相…

Java语法基础

回顾 1、了解编程语言 2、编程语言分类 ​ 机器语言、汇编语言、高级语言 3、了解java ​ 跨平台(.class文件) .java(源文件) ​ .java ----编译---->.class 4、jdk 、jre、jvm 5、开发 写代码 eclipse idea 记事本 …

企业级SSD还是一个巨大的蓝海~

根据Allied Market Research市场分析报告显示,2020 年全球企业级 SSD 市场规模为 178.5 亿美元,预计到 2030 年将达到 468.9 亿美元,2021 年至 2030 年的复合年增长率为 10.2%。 扩展阅读:华为展望|2030年数据中心存储…

科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?

科技云报道原创。 最简单的方式,往往是最有效的,勒索软件攻击就属于这类。 近两年,随着人类社会加速向数字世界进化,勒索软件攻击成为网络安全最为严重的威胁之一。今年以来,勒索软件攻击在全球范围内呈现快速上升态…

亚马逊、eBay如何提升测评环境的安全性?解决砍单和F号问题

跨境平台的风控不是一层不会变的,特别年底风控最为严格。亚马逊的风控升级都是大规模持续进行的。如果测评环境没有相应更新,可能会导致大量订单被取消,账号被F,甚至店铺被关联,因此针对风控升级至关重要。 今年&…

微信私域运营工具CRM

为什么要做微信私域? 客户在哪里?微信!在中国,不论男女老少,90%的人每天使用微信至少5次,每次使用时间超过90分钟,已经成为像吃饭穿衣一样的生活必需品。因此,我们的目标客户就在微…

【数据结构】详解链表结构

目录 引言一、链表的介绍二、链表的几种分类三、不带头单链表的一些常用接口3.1 动态申请一个节点3.2 尾插数据3.3 头插数据3.4 尾删数据3.5 头删数据3.6 查找数据3.7 pos位置后插入数据3.8 删除pos位置数据3.9 释放空间 四、带头双向链表的常见接口4.1创建头节点(初…

旋极携手西班牙SoC-e公司,为中国客户提供高效可靠TSN通讯解决方案

2023年2月,旋极信息与西班牙SoC-e公司正式签订战略合作协议,成为其在中国区重要合作伙伴。 SoC-e是一家世界领先的基于FPGA技术的以太网通讯解决方案供应商,是一系列IP核开发领域的先锋,为关键任务实施网络化、同步性和安全性提供…

网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍

应用层 应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU ( Paket Data Unit,协议数据单元)彼此交换信…

Virtual安装centos后,xshell连接centos 测试及遇到的坑

首先来一张官方的图--各种网络模式对应的连接状况: 1. 网络使用Host-Only模式动态分配IP,点确定后,centos 上运行 system restart network ,使用ifconfig查看新的ip,XShell可以直接连上centos, 但是由于使用…

【Python】给定n个十六进制正整数,输出它们对应的八进制数。

3.问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 样例输入 2 39 123ABC 样例输出 71 4435274 n int(input()) li [] # 创建列表 for i in range(n):li.append(input()) # 输入数据 for num in li:if len(num) < 100000: # 判断长度是否符…

vue el-table字段点击出现el-input输入框,失焦保存

一、效果展示 当没有数据初始化展示如下&#xff1a; 有数据展示数据&#xff0c;点击出现输入框&#xff0c; 失焦保存修改 二、代码实现 <!-- cell-click"cellClick" 当前单击的单元格 --> <el-tableref"table"size"mini"height&qu…

vue3+vite+SQL.js 读取db3文件数据

前言&#xff1a;好久没写博客了&#xff0c;最近一直在忙&#xff0c;没时间梳理。最近遇到一个需求是读取本地SQLite文件&#xff0c;还是花费了点时间才实现&#xff0c;没怎么看到vite方面写这个的文章&#xff0c;现在分享出来完整流程。 1.pnpm下载SQL.js(什么都可以下)…

值得学习的演示文稿制作范例

1,在第一张幻灯片前插入1张新幻灯片,设置幻灯片大小为“全屏显示(16:9) ”;为整个演示文稿应用“离子会议室”主题,放映方式为“观众自行浏览”;除了标1题幻灯片外其它每张幻灯片中的页脚插入“晶泰来水晶吊坠”七个字。 2,第一张幻灯片的版式设置为“标题幻灯片”,主标题为“…
最新文章