当前位置: 首页 > news >正文

Object常用方法

 

Object常用方法目录

1. equals(Object obj):

2. toString():

3. hashCode():

4. getClass():

5.  notify() 和 notifyAll():

6.  wait() 和 wait(long timeout):

7.  clone():

8.  finalize():


        在 Java 中,Object 是所有类的超类,其中定义了一些常用的方法。Object常用方法有:toString()equals()hashCode()clone()等。以下是几个常用的 Object 方法:

1. equals(Object obj):

        判断当前对象是否与另一个对象相等。通常需要重写该方法来自定义相等的逻辑。

2. toString():

        返回当前对象的字符串表示。通常需要重写该方法来自定义对象的字符串表示。

3. hashCode():

        返回当前对象的哈希码。通常需要与 equals 方法配合使用。

4. getClass():

        返回当前对象的类对象。


/*** @author Evan Walker 昂焱科技* @version 1.0* @desc* @date 2023/10/31 23:10:36*/
public class Room {private Integer id;private String name;public Room(Integer id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "Room{" +"id=" + id +", name='" + name + '\'' +'}';}public static void main(String[] args) {String name = "昂焱科技会议室";Room p1 = new Room(18, name);Room p2 = new Room(18, name);// 1. equals(Object obj):System.out.println(p1.equals(p2));// 2. toString():System.out.println(p1.toString());// 3. hashCode():System.out.println(p1.hashCode());// 4. getClass():System.out.println(p1.getClass());}
}

5.  notify() 和 notifyAll():

        唤醒一个或多个正在等待当前对象锁的线程。

notify

  • 用法:public final void notify()
  • 功能:唤醒正在等待当前对象锁的单个线程。如果有多个线程在等待,但只能有一个线程被唤醒。哪个线程被唤醒是不确定的,取决于 JVM 的调度。
  • 注意事项:
    • 调用 notify() 方法的前提是当前线程已经获取了对象的锁(即在同步代码块或同步方法中)。
    • notify() 方法只会唤醒等待队列中的一个线程,无法确定是哪个线程被唤醒。

notifyAll

  • 用法:public final void notifyAll()
  • 功能:唤醒正在等待当前对象锁的所有线程,让它们竞争获取锁。
  • 注意事项:
    • 调用 notifyAll() 方法的前提是当前线程已经获取了对象的锁(即在同步代码块或同步方法中)。
    • notifyAll() 方法会唤醒等待队列中的所有线程,让它们开始竞争获取锁。但是只有一个线程能够获取到锁并继续执行,其他线程将继续等待。

6.  wait() 和 wait(long timeout):

        使当前线程等待,直到另一个线程调用当前对象的 notify() 或 notifyAll() 方法唤醒它,或者等待超时。

wait

  • 用法:public final void wait() throws InterruptedException
  • 功能:使当前线程进入等待状态,直到其他线程调用相同对象的 notify() 或 notifyAll() 方法来唤醒它。
  • 注意事项:
    • 调用 wait() 方法的前提是当前线程已经获取了对象的锁(即在同步代码块或同步方法中)。
    • wait() 方法会释放对象的锁,让其他线程有机会获取锁并执行。
    • 在被唤醒之后,线程需要重新竞争获取对象的锁才能继续执行。

wait(long timeout)

  • 用法:public final void wait(long timeout) throws InterruptedException
  • 功能:使当前线程进入等待状态,并在指定的时间范围内等待,直到其他线程调用相同对象的 notify() 或 notifyAll() 方法来唤醒它,或者超过指定的时间。
  • 参数:
    • timeout:等待的时间(以毫秒为单位)。如果超过该时间,线程将自动唤醒。
  • 注意事项:
    • 调用 wait(long timeout) 方法的前提是当前线程已经获取了对象的锁(即在同步代码块或同步方法中)。
    • wait(long timeout) 方法会释放对象的锁,并在等待指定的时间内进入等待状态。
    • 在被唤醒之后,线程需要重新竞争获取对象的锁才能继续执行。
    • 如果等待时间超过指定的时间,则线程会自动唤醒。

/*** @author Evan Walker 昂焱科技* @version 1.0* @desc* @date 2023/11/01 19:54:22*/
public class TestDemo {public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread t1 = new Thread(() -> {try {System.out.println("wait开始");synchronized (locker) {// 6. wait() 和 wait(long timeout):locker.wait();// locker.wait(3000L);}System.out.println("wait结束");} catch (InterruptedException e) {e.printStackTrace();}});t1.start();//保证t1先启动,wait()先执行Thread.sleep(1000);Thread t2 = new Thread(() -> {synchronized (locker) {System.out.println("notify开始");// notify() 和 notifyAll():locker.notify();// locker.notifyAll();System.out.println("notify结束");}});t2.start();}
}

7.  clone():

        创建并返回当前对象的副本。通常需要实现 Cloneable 接口才能使用该方法。

    clone() 方法用于创建并返回一个对象的副本,这个副本与原始对象完全相同(包括数据和状态),但是它们在内存中的地址不同。也就是说,使用 clone() 方法可以创建一个新的对象,而不需要再次调用构造函数。

    clone() 方法是一个受保护的方法,因此只能在具有适当权限的同一类或其子类中访问。为了对外公开,通常需要重写 Object 类中的 clone() 方法,并将其声明为 public 类型。

/*** @author Evan Walker 昂焱科技* @version 1.0* @desc* @date 2023/11/02 21:38:03*/
public class CloneDemo implements Cloneable{private int value;public CloneDemo(int value) {this.value = value;}public int getValue() {return value;}@Overridepublic CloneDemo clone() throws CloneNotSupportedException {return (CloneDemo) super.clone();}
}

        在上面的示例中,我们首先声明了一个 CloneDemo 类,并实现了 Cloneable 接口以指示该类支持克隆操作。然后,我们重写了 Object 类中的 clone() 方法,并将其声明为 public 类型。

        在 clone() 方法的实现中,我们首先调用了 super.clone() 方法获取 CloneDemo 类的浅副本,之后将其强制转换成 MyClass 类型并返回。这样,我们就可以通过调用 clone() 方法来创建 CloneDemo 类的一个副本。

        需要注意的是,使用 clone() 方法进行对象复制时,如果对象中包含其他对象的引用,那么实际上只会复制这些引用而不是它们所引用的对象。也就是说,被复制的对象和其副本之间可能会共享一些数据结构,这样可能会导致副本对象与原始对象在内存中存在交叉引用的问题。为了避免这种问题,可以采用深度克隆方法或其他方式进行修改。

8.  finalize():

        当对象被垃圾回收器回收时,系统会调用该方法,通常用于对象资源的清理。

        在 Java 中,finalize() 方法是一个被废弃的方法,在最新版本的 Java 中已经不推荐使用。它是定义在 Object 类中的一个方法,其作用是在对象被垃圾回收之前执行一些清理操作。

        然而,由于 finalize() 方法存在性能、可靠性和安全性等方面的问题,Java 社区建议使用其他机制来进行资源释放和清理操作,如使用 try-with-resources 块或显式地关闭资源。

        以下是一个使用 try-with-resources 块关闭文件流的示例:

try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用文件流进行读取或写入操作
} catch (IOException e) {// 处理异常
}

        在上述示例中,通过将文件流的创建和使用放在 try 括号内,Java 会在代码块执行完毕后自动关闭文件流,无需显式地调用 close() 方法。

        总结起来,避免使用 finalize() 方法,而是倾向于使用更可靠和明确的方式来释放资源。

        这些方法都是 Object 类中定义的方法,因此在任何类中都可以使用它们。此外,由于 Java 中的所有类都是继承自 Object 类的,因此这些方法在每个类中都有默认的实现,但有时候需要根据具体情况进行重写以实现特定的行为。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

相关文章:

Object常用方法

Object常用方法目录 1. equals(Object obj): 2. toString(): 3. hashCode(): 4. getClass(): 5. notify() 和 notifyAll(): 6. wait() 和 wait(long timeout): 7. clone(): 8. fina…...

【VR开发】【Unity】【VRTK】2-关于VR的基础知识

【概述】 在VRTK的实操讲解之前,本篇先介绍几个重要的VR认识。 【VR对各个行业的颠覆】 如果互联网几乎把所有行业都重做了一遍,VR在接下来的几年很可能再把现有的行业都重做一遍,包括但不限于教育,房地产,零售&…...

jeecg-uniapp 转成小程序的过程 以及报错 uniapp点击事件

uniapp 点击事件 tap: 单击事件 confirm: 回车事件 blur:失去焦点事件 touchstart: 触摸开始事件 touchmove: 触摸移动事件。 touchend: 触摸结束事件。 longpress: 长按事件。 input: 输入框内容变化事件。 change: 表单元素值变化事件。 submit: 表单提交事件。 scroll: 滚动…...

Django的静态文件目录(路径)如何配置?

通常用下面的三条语句配置Django的静态文件目录 STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, /static)那么这三条语句分别的作用是什么呢? 请参考博文 https://blog.csdn.net/wenhao_ir/articl…...

函数应用(MySQL)

--数值类函数 --绝对值 select abs(-1) --seiling ceil 向上取整 select ceil(1.1) --floor 向下取整 select floor(1.9); --四舍五入 select round(1.17, 1); --rand 随机数 select rand(rand()*1000); --字符串函数 utf8mb3 utfmb4 select length(小三) --查找字符数…...

数据分析过程中,发现数值缺失,怎么办?

按照数据缺失机制,数据分析过程中,我们可以将其分为以下几类: (1)完全随机缺失(MCAR):所缺失的数据发生的概率既与已观察到的数据无关,也与未观察到的数据无关。 &#x…...

Vue3.0 toRef toRefs :VCA模式

简介 作用: 创建一个ref对象,其value值指向另一个对象中的某个属性 语法: const name toRef(person, name) 应用: 要将响应式对象中的某个属性单独供应给外部使用时 扩展: toRefs与toRef功能一致,但可…...

VS Code提取扩展时出错。XHR failed

需求:想要在扩展中心下载插件,发现报错 原因:vs code之前设置了代理,需要删除即可...

大模型需要哪类服务器

大模型需要高性能的服务器,以支持大规模的计算和存储需求。一般来说,大模型需要以下类型的服务器: 大型机:大型机可以提供强大的计算能力,适合处理大规模的数据和复杂的计算任务。 GPU服务器:GPU服务器可以…...

Java进阶(List)——面试时List常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中List集合的面试问题,结合源码分析题目背后的知识点。 关于的Set的博客文章如下: Java进阶(Set)——面试时…...

0基础学习PyFlink——个数滑动窗口(Sliding Count Windows)

大纲 滑动(Sliding)和滚动(Tumbling)的区别样例窗口为2,滑动距离为1窗口为3,滑动距离为1窗口为3,滑动距离为2窗口为3,滑动距离为3 完整代码参考资料 在 《0基础学习PyFlink——个数…...

vue3+ts 提取公共方法

因为好多页面都会使用到这个效验规则,封装一个校检规则,方便维护 封装前 封装后...

C++ ->

C -> 是访问类或结构体对象的成员的运算符 注意这里不是直接的访问.是用于访问指向对象的指针的成员 下面的代码可以很好的理解如下&#xff1a; #include<iostream>using namespace std;class Func{public:int i,j;void myFunc(){cout<<"i"<&l…...

VR全景在医院的应用:缓和医患矛盾、提升医院形象

医患关系一直以来都是较为激烈的&#xff0c;包括制度的不完善、医疗资源紧张等问题也时有存在&#xff0c;为了缓解医患矛盾&#xff0c;不仅要提升患者以及家属对于医院的认知&#xff0c;还需要完善医疗制度&#xff0c;提高医疗资源的配置效率&#xff0c;提高服务质量。 因…...

【python基础】format格式化函数的使用

文章目录 前言一、format()内容匹配替换1、序号索引2、关键字3、列表索引4、字典索引5、通过类的属性6、通过魔法参数 二、format()数字格式化 前言 语法&#xff1a;str.format() 说明&#xff1a;一种格式化字符串的函数。 一、format()内容匹配替换 1、序号索引 在没有参…...

Java web(三):Http、Tomcat、Servlet

文章目录 一、Java web技术栈二、Http1.1 Http请求数据格式1.2 Http响应数据格式1.3 状态码 二、Tomcat2.1 介绍2.2 web项目结构2.3 IDEA中使用Tomcat 三、Servlet3.1 Servlet使用3.2 Servlet生命周期3.3 Servlet方法和体系结构3.4 urlPattern配置 四、Request4.1 获取请求数据…...

Java实现Hive UDF详细步骤 (Hive 3.x版本,IDEA开发)

这里写目录标题 前言1. 新建项目2.配置maven依赖3.编写代码4.打jar包5.上传服务器6.代码中引用 前言 老版本编写UDF时&#xff0c;需要继承 org.apache.hadoop.hive.ql.exec.UDF类&#xff0c;然后直接实现evaluate()方法即可。 由于公司hive版本比较高&#xff08;3.x&#x…...

Vue进阶(幺陆肆)Apache的Access.log分析总结

文章目录 一、前言二、常用指令 一、前言 前端项目排错阶段&#xff0c;可借助apache的Access.log进行请求日志查看。 二、常用指令 #查看80端口的tcp连接 #netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l #当前WEB服务器中联接次数最多的ip地…...

Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片

本心、输入输出、结果 文章目录 Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片前言M3、M3 Pro 和 M3 Max 芯片的性能相关资料图M3 Pro规格M3 Max规格弘扬爱国精神 Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片 编辑&#xff1a;简简单单 Online zuozuo 地址&#xff1a;https://blog…...

Linux常用命令及主流服务部署大全

目录 Linux 系统目录 一、常用操作命令 1、目录操作 2、文件内容操作&#xff08;查看日志&#xff0c;更改配置文件&#xff09; 3、压缩和解压缩 4、更改文件权限 二、各服务部署命令 1、增加虚拟内存 2、JDK 2.1 删除系统自带的openjdk 2.2 安装jdk 2.3 删除jd…...

精准权限控制:Excel限制密码设置与使用技巧

当Excel表格发出去后&#xff0c;你是否会担心表格被随意修改&#xff1f;其实&#xff0c;Excel提供的“限制密码”就能很好的避免这个问题。下面一起来看看具体如何使用吧&#xff01;一、认识两种限制密码Excel的限制密码分为两大类&#xff1a;保护工作表和保护工作簿。前者…...

新手入门指南:在快马平台上手把手实现openclaw基础功能

今天想和大家分享一个特别适合新手入门的机器人抓取项目——openclaw的基础实现。作为一个开源机器人抓取框架&#xff0c;openclaw结合了视觉识别和触觉反馈&#xff0c;是学习多模态控制的绝佳案例。我在InsCode(快马)平台上尝试实现了一个简化版本&#xff0c;整个过程对初学…...

如何用Notepad--打造跨平台开发环境:国产编辑器的逆袭之路

如何用Notepad--打造跨平台开发环境&#xff1a;国产编辑器的逆袭之路 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

从分子动力学模拟到结合自由能分析:gmx_MMPBSA实战指南

从分子动力学模拟到结合自由能分析&#xff1a;gmx_MMPBSA实战指南 【免费下载链接】gmx_MMPBSA gmx_MMPBSA is a new tool based on AMBERs MMPBSA.py aiming to perform end-state free energy calculations with GROMACS files. 项目地址: https://gitcode.com/gh_mirrors…...

SEO最常用的工具有哪些_新手SEO如何选择工具

SEO最常用的工具有哪些&#xff1f;新手SEO如何选择工具 在当今的数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已成为提升网站流量和品牌知名度的关键手段。作为新手SEO&#xff0c;你可能会遇到一个重要的问题&#xff1a;SEO最常用的工具有哪些&#xff…...

GLM-4.1V-9B-Base效果展示:低质量压缩图(微信发送后)识别鲁棒性

GLM-4.1V-9B-Base效果展示&#xff1a;低质量压缩图&#xff08;微信发送后&#xff09;识别鲁棒性 1. 模型介绍 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型&#xff0c;专门针对图像内容识别、场景描述、目标问答和中文视觉理解任务进行了优化。这个9B参数的模型在保持…...

开源项目 Homelab 使用教程

开源项目 Homelab 使用教程 项目介绍 Homelab 是一个开源项目&#xff0c;旨在帮助用户构建和管理自己的家庭实验室。该项目提供了一套完整的工具和配置&#xff0c;使用户能够轻松地部署和管理各种服务和应用。Homelab 项目由 khuedoan 开发&#xff0c;基于 Kubernetes 和其他…...

H5扫码不止‘扫一扫’:深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法

H5扫码不止‘扫一扫’&#xff1a;深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法 扫码功能早已成为移动端应用的标配&#xff0c;但大多数开发者止步于基础调用&#xff0c;忽略了用户体验的精细打磨。当产品经理提出"不仅要能用&#xff0c;还要好…...

AI SaaS创业:从0到1打造爆款产品的核心方法论

市场定位与需求验证通过数据分析和用户访谈验证目标市场的真实需求。使用工具如Google Trends、SEMrush分析搜索热度&#xff0c;结合用户调研&#xff08;SurveyMonkey、Typeform&#xff09;明确痛点。避免主观假设&#xff0c;确保产品解决高频、高价值问题。最小可行产品&a…...

墨语灵犀网络安全知识库:基于AI的威胁情报分析与解读

墨语灵犀网络安全知识库&#xff1a;让AI成为你的安全分析师 最近和几个做安全运营的朋友聊天&#xff0c;他们都在抱怨同一件事&#xff1a;每天面对海量的安全告警和晦涩的漏洞报告&#xff0c;眼睛都快看花了。一份新的漏洞描述扔过来&#xff0c;光是理解它到底在说什么、…...