jase-18、API.Object类

news2024/12/25 2:47:31

Object类常用方法

object 是 Integer 的父类?

在 Java 中,Object类是所有类的超类。这意味着如果一个类没有明确地继承其他类,那么它默认继承Object

class MyClass{
    // 这个类默认继承了Object类
}

toString()方法

  • 该方法主要用于返回一个对象的字符串表示形式。
  • 默认情况下,它返回的是对象的类名和一个哈希码(十六进制表示)
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person("Alice", 25);
        System.out.println(p); 
    }
}

equals()方法

用途:用于比较两个对象是否相等。在Object类中,equals()方法默认是比较两个对象的引用是否相同,也就是判断两个对象是否是同一个对象。

class Book {
    private String title;
    private String author;
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass()!= o.getClass()) return false;
        Book book = (Book) o;
        return title.equals(book.title) && author.equals(book.author);
    }
}
public class Main {
    public static void main(String[] args) {
        Book book1 = new Book("Java核心技术", "Cay Horstmann");
        Book book2 = new Book("Java核心技术", "Cay Horstmann");
        System.out.println(book1.equals(book2)); 
    }
}

hashCode()方法

  • 用途:返回对象的哈希值。在Object类中,hashCode()方法返回的是一个基于对象内存地址的整数。
  • 规则:如果两个对象根据equals()方法比较是相等的,那么它们的hashCode()值必须相同;但是如果两个对象的hashCode()值相同,它们不一定相等(这就是所谓的哈希冲突)。
class Person {
    private String name;
    private int age;

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

    // 重写hashCode方法(简单示例,实际应用可能更复杂)
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        return result;
    }

    // 重写equals方法,很重要,因为hashCode相等时,equals通常也要进行合适判断
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass()!= o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && name.equals(person.name);
    }
}

public class HashCodeDemo {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice", 25);

        System.out.println("person1的hashCode: " + person1.hashCode());
        System.out.println("person2的hashCode: " + person2.hashCode());

        System.out.println("person1和person2是否相等(通过equals判断): " + person1.equals(person2));
    }
}

clone()方法

用途:用于创建并返回一个对象的副本。

浅拷贝

class Person implements Cloneable {
    private String name;
    private int age;
    private Address address;

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // 重写clone方法实现浅克隆
    @Override
    public Person clone() throws CloneNotSupportedException {
        return (Person) super.clone();
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Address getAddress() {
        return address;
    }
}

class Address {
    private String city;

    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}

public class ShallowCloneDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Address address = new Address("Beijing");
        Person person1 = new Person("Alice", 25, address);

        Person person2 = person1.clone();

        System.out.println("person1的信息:");
        System.out.println("姓名: " + person1.getName());
        System.out.println("年龄: " + person1.getAge());
        System.out.println("地址: " + person1.getAddress().getCity());

        System.out.println("person2的信息:");
        System.out.println("姓名: " + person2.getName());
        System.out.println("年龄: " + person2.getAge());
        System.out.println("地址: " + person2.getAddress().getCity());

        // 修改person2中地址对象的城市信息
        person2.getAddress().setCity("Shanghai");

        System.out.println("修改person2地址后:");
        System.out.println("person1的地址: " + person1.getAddress().getCity());
        System.out.println("person2的地址: " + person2.getAddress().getCity());
    }
}

深拷贝

import java.io.*;

class Person implements Cloneable, Serializable {
    private String name;
    private int age;
    private Address address;

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // 重写clone方法实现深克隆(利用序列化和反序列化)
    @Override
    public Person clone() throws CloneNotSupportedException {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(this);

            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bis);
            return (Person) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            throw new CloneNotSupportedException(e.getMessage());
        }
    }

    public String getName() {
        return name;
    }

    public String getAge() {
        return String.valueOf(age);
    }

    public Address getAddress() {
        return address;
    }
}

class Address implements Serializable {
    private String city;

    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}

public class DeepCloneDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Address address = new Address("Beijing");
        Person person1 = new Person("Alice", 25, address);

        Person person2 = person1.clone();

        System.out.println("person1的信息:");
        System.out.println("姓名: " + person1.getName());
        System.out.println("年龄: " + person1.getAge());
        System.out.println("地址: " + person1.getAddress().getCity());

        System.out.println("person2的信息:");
        System.out.println("姓名: " + person2.getName());
        System.out.println("年龄: " + person2.getAge());
        System.out.println("地址: " + person2.getAddress().getCity());

        // 修改person2中地址对象的城市信息
        person2.getAddress().setCity("Shanghai");

        System.out.println("修改person2地址后:");
        System.out.println("person1的地址: " + person1.getAddress().getCity());
        System.out.println("person2的地址: " + person2.getAddress().getCity());
    }
}

finalize()方法

用途:在对象被垃圾回收之前调用,用于执行一些清理操作。
如:对象中使用了一些外部资源,如文件句柄、网络连接、数据库连接等,在对象不再被使用时,需要在 finalize() 方法中释放这些资源,以防止资源泄漏。

class MyObject {

    // 重写finalize方法
    @Override
    protected void finalize() throws Throwable {
        System.out.println("对象 " + this + " 即将被回收,正在执行finalize方法");
        super.finalize();
    }
}

public class FinalizeDemo {
    public static void main(String[] args) {
        MyObject obj = new MyObject();
        // 将obj置为null,让其可以被垃圾回收
        obj = null;
        // 主动触发垃圾回收(注意,垃圾回收的实际执行时机仍不确定,这只是建议虚拟机执行回收)
        System.gc();

        try {
            // 让主线程休眠一会,给垃圾回收线程机会去执行finalize方法(只是增加执行的可能性)
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

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

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

相关文章

‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 1.情况: npm -v 和 node -v的都正常就是 pnpm-v 无效 检查环境变量也没看出问题 2.分析 没有正确添加环境变量 3.解决 找到npm的全局安装目录 npm list -g --depth 0这里出现了npm的全局安装…

Docker 部署 SpringBoot VUE项目

是一套基于若依的wms仓库管理系统 一、后端部署 后端地址:https://gitee.com/zccbbg/wms-ruoyi/tree/v1/ 1、用IDEA拉代码,并修改API统一后缀 2、复制一个配置文件 application-dev.yaml,并修改里面的mysql与redis配置 3、将打包的jar上传…

面试基础篇---迭代器,yield, tcp, 等

1.谈谈python的装饰器,迭代器,yield? 迭代器在内存中通常是一次性遍历的,也就是说,一旦遍历完所有元素,它就会停止工作,不可再用。 惰性计算:生成器按需生成数据,即只有在…

【文档搜索引擎】搜索模块的完整实现

调用索引模块,来完成搜索的核心过程 主要步骤 简化版本的逻辑: 分词:针对用户输入的查询词进行分词(用户输入的查询词,可能不是一个词,而是一句话)触发:拿着每个分词结果&#xf…

帝国cms灵动标签调用相关文章

帝国cms相关文章调用的方法很多,官方默认调用方法是使用标签 [!--other.link--] 那么内容页调用相关文章,什么时候用到灵动标签呢 答案是调用同类型的文章,比如有相同关键词或者相同tags标签的文章 使用灵动标签是如何调用的呢&#xff0…

低空经济的地理信息支撑:构建安全、高效的飞行管理体系

随着无人机等低空飞行器的广泛应用,低空空域管理的重要性日益凸显。地理信息技术作为低空空域管理的重要支撑,对于保障低空经济的健康发展具有不可替代的作用。 地理信息技术在低空空域管理中的作用 地理信息技术在低空空域管理中扮演着关键角色&#x…

一体式IO模块:打印机加工产线国产化降本增效的新利器

在当今全球化的市场竞争中,打印机制造行业面临着前所未有的挑战与机遇。为了提升生产效率、降低成本,并加速国产化进程,各大打印机制造商纷纷寻求技术创新与升级。明达技术自研推出的MR20一体式IO模块作为工业自动化领域的核心组件&#xff0…

「下载」智慧产业园区-数字孪生建设解决方案:重构产业全景图,打造虚实结合的园区数字化底座

数字孪生技术作为一种创新的管理工具,正逐步展现出其在智慧园区建设中的重要意义。以下将从几个方面详细阐述数字孪生在智慧园区建设中的关键作用。 一、提升园区运营管理的智能化水平 数字孪生技术通过构建园区的虚拟镜像,实现了对园区物理世界的全面…

ICASSP 2025 中了 ,不去印度参会就撤稿?

近日,ICASSP 2025正式放榜,身边很多同学都收到了好消息,虽然目前官方还没有给出正式的数据,但据知情人士透露,今年的投稿编号超过8000,可以说是创造了历史新高,预测整体录取率在46%左右。 根据…

深度学习之目标检测——RCNN

Selective Search 背景:事先不知道需要检测哪个类别,且候选目标存在层级关系与尺度关系 常规解决方法:穷举法,在原始图片上进行不同尺度不同大小的滑窗,获取每个可能的位置 弊端:计算量大,且尺度不能兼顾 Selective …

LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度

本代码的主要功能是建模 LOS(视距)和 NLOS(非视距)环境下的定位系统,估计目标的动态位置,三维空间 文章目录 运行结果源代码代码介绍 总结 运行结果 10个点的轨迹定位: 50个点的轨迹定位&#…

企业内训|高智能数据构建、Agent研发及AI测评技术内训-吉林省某汽车厂商

吉林省某汽车厂商为提升员工在AI大模型技术方面的知识和实践能力,举办本次为期8天的综合培训课程。本课程分为两大部分:面向全体团队成员的AI大模型技术结构与行业应用,以及针对技术团队的高智能数据构建与Agent研发。课程内容涵盖非结构化数…

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题

内外网数据交换是很多企业和行业都会面临的场景,既然隔离了内外网,重中之重就是要确保数据的安全性,其次在数据流转交换过程中,不能太繁琐复杂,需要让用户快速、便捷的进行数据交换。首先我们来看看,在进行…

【linux】NFS实验

NFS服务 NFS是Network File System(网络文件系统)的缩写。它是一种用于在计算机网络中共享文件和目录的协议。NFS允许计算机上的用户访问和操作远程计算机上的文件,就像访问本地文件一样。它使用客户端-服务端模型,其中客户端机器…

2024年Python最新下载安装教程,附详细图文,持续更新

大家好,我是Python老安,今天为大家带来的是Windows Python3下载、安装教程,适用于 Python3 所有版本,包括 Python3.7,Python33.8,Python33.10 等版本。希望对大家有所帮助 Python目前已支持所有主流操作系统,在Linux,…

职业技能赛赛后心得

这是一位粉丝所要求的,也感谢这位粉丝对我的支持。 那么本篇文章我也是分成四个部分,来总结一下这次赛后心得。 赛中问题 那么这里的赛中问题不会只包含我所遇到的问题,也会包含赛中其他选手出现的问题。 那么首先我先说一下我在赛中遇到的…

WordPress File Upload 插件 任意文件读取漏洞复现(CVE-2024-9047)

0x01 产品简介 WordPress File Upload插件是一款功能强大的WordPress站点文件上传插件,它允许用户在WordPress站点中的文章、页面、侧边栏或表单中轻松上传文件到wp-contents目录中的任何位置。该插件使用最新的HTML5技术,确保在现代浏览器和移动设备上都能流畅运行,同时也…

没想到互联网大厂都喜欢问MySQL中的数据类型?

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…

YOLOv8 引入高效的可变形卷积网络 DCNv4 | 重新思考用于视觉应用的动态和稀疏算子

我们介绍了可变形卷积v4(DCNv4),这是一种为广泛的视觉应用设计的高效且有效的算子。DCNv4通过以下两项关键改进解决了其前身DCNv3的局限性: 在空间聚合中移除softmax归一化,以增强其动态特性和表达能力。优化内存访问,减少冗余操作以提高速度。这些改进使得DCNv4相比DCNv…

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后,进一步的操作是实现入侵他人电脑,这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址(通过伪造的网页、伪造的Windows窗口、hook,信…