Java中Object类常用的12个方法(小结)

Java中Object类常用的12个方法(小结)

在Java中,Object类是所有类的根类,其包含了许多常用的方法。以下是Java中Object类常用的12个方法:

equals

equals方法用来比较两个对象是否相等。默认情况下,equals方法比较的是对象的引用地址,即比较的是两个对象是否是同一个对象。如果我们希望比较它们的内容是否相等,就需要在自定义类中重写该方法。

示例代码:

public class Person {
    private String name;
    private int age;

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

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }

        if (!(obj instanceof Person)) {
            return false;
        }

        Person other = (Person) obj;
        return this.name.equals(other.name) && this.age == other.age;
    }
}

Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2)); // true

hashCode

hashCode方法返回对象的哈希码,如果两个对象相等,那么它们的哈希码一定相等。如果在自定义类中重写了equals方法,也应该重写hashCode方法,以便可以使使用该对象的哈希数据结构(如HashSet或HashMap)更加高效。

示例代码:

public class Person {
    private String name;
    private int age;

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }

        if (!(obj instanceof Person)) {
            return false;
        }

        Person other = (Person) obj;
        return this.name.equals(other.name) && this.age == other.age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.hashCode() == p2.hashCode()); // true

toString

toString方法返回一个包含对象信息的字符串,通常它被用来调试类的实例。

示例代码:

public class Person {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Person p1 = new Person("Tom", 18);
System.out.println(p1); // Person{name='Tom', age=18}

getClass

getClass方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。

示例代码:

Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person

finalize

finalize方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。

示例代码:

public class Person {
    @Override
    protected void finalize() {
        System.out.println("The object is being finalized.");
    }
}

Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾

clone

clone方法用于创建当前对象的一个副本(浅拷贝),一般在需要复制某个对象时使用。需要注意的是,在使用clone方法时,需要保证被复制的对象实现Cloneable接口,否则在运行时会抛出CloneNotSupportedException异常。

示例代码:

public class Person implements Cloneable {
    private String name;
    private int age;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Person p1 = new Person("Tom", 18);
Person p2 = (Person) p1.clone();
System.out.println(p1 == p2); // false

notify和wait

notifywait方法是在多线程编程中使用的方法,它们用于在共享资源的同步机制中协作,实现线程的等待和唤醒。

示例代码:

public class SharedResource {
    private int value;

    synchronized void setValue(int value) {
        this.value = value;
        notify();
    }

    synchronized int getValue() throws InterruptedException {
        while (value == 0) {
            wait();
        }
        int result = value;
        value = 0;
        return result;
    }
}

SharedResource sr = new SharedResource();

Thread t1 = new Thread(() -> {
    try {
        Thread.sleep(1000); // 让t2先运行
        sr.setValue(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

Thread t2 = new Thread(() -> {
    try {
        int result = sr.getValue();
        System.out.println(result); // 输出10
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

t1.start();
t2.start();

notifyAll

notifyAll方法用于唤醒在该对象上等待的所有线程。

示例代码:

public class SharedResource {
    private int value;

    synchronized void setValue(int value) {
        this.value = value;
        notifyAll();
    }

    synchronized int getValue() throws InterruptedException {
        while (value == 0) {
            wait();
        }
        int result = value;
        value = 0;
        return result;
    }
}

SharedResource sr = new SharedResource();

Thread t1 = new Thread(() -> {
    try {
        Thread.sleep(1000); // 让t2先运行
        sr.setValue(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

Thread t2 = new Thread(() -> {
    try {
        sr.getValue();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

Thread t3 = new Thread(() -> {
    try {
        sr.getValue();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

t1.start();
t2.start();
t3.start();

finalize

finalize方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。

示例代码:

public class Person {
    @Override
    protected void finalize() {
        System.out.println("The object is being finalized.");
    }
}

Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾

getClass

getClass方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。

示例代码:

Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person

finalize

finalize方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。

示例代码:

public class Person {
    @Override
    protected void finalize() {
        System.out.println("The object is being finalized.");
    }
}

Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾

getClass

getClass方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。

示例代码:

Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person

总结

Java中Object类提供了许多常用的方法,包括equalshashCodetoStringgetClassclonenotifywaitnotifyAllfinalize等。学习并掌握这些方法可以帮助我们更加高效地设计和开发Java程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Object类常用的12个方法(小结) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringBoot实现物品点赞功能

    下面是关于SpringBoot实现物品点赞功能的完整攻略: 前言 物品点赞功能是很常见的网站功能之一。Spring Boot 给我们提供了很好的实现方式,通过本文,你可以学习到 Spring Boot 如何实现物品点赞功能。 实现过程 创建数据库 首先我们需要创建一个数据库来储存点赞信息。数据库需要包含以下两个表: item 表:储存物品信息,包括物品 ID…

    Java 2023年5月23日
    00
  • Java多线程编程之ThreadLocal线程范围内的共享变量

    下面是详细讲解Java多线程编程之ThreadLocal线程范围内的共享变量的攻略。 简介 在多线程编程当中,线程间的数据共享和数据保护是非常重要的。ThreadLocal就是一种解决多线程数据共享和数据保护的技术,它能够实现线程间数据的隔离,使得不同线程之间访问自己保存的变量,就好像在每个线程里面都有一个私有的变量一样。 简单地说,ThreadLocal是…

    Java 2023年5月19日
    00
  • java分布式流式处理组件Producer分区理论

    Java分布式流式处理组件Producer分区理论 在实现分布式流式处理的时候,数据的分区是一个很重要的考虑点,它关系到数据处理的负载均衡以及数据的可靠性。Java分布式流式处理组件Producer提供了分区的机制,可以灵活地对数据进行分区,这篇文章将介绍Producer的分区理论。 1. 消息分区 消息分区是指将消息划分到不同的分区,不同的分区可以在不同的…

    Java 2023年5月20日
    00
  • JDBC链接数据库的几个步骤

    JDBC 是Java Database Connectivity的缩写,意为Java数据库连通性,是Java语言中访问数据库的一种技术。以下是JDBC链接数据库的几个步骤以及示例: 步骤一:加载数据库驱动 在Java程序中要想使用某个数据库的API,就必须先装载这个数据库的驱动程序。 try { // 加载MySQL驱动 Class.forName(&quo…

    Java 2023年5月20日
    00
  • java8新特性之日期时间API

    Java8新特性之日期时间API 前言 Java8引入了全新的日期时间API,取代了原有的java.util.Date和java.util.Calendar等日期时间处理工具类。这里将会简单介绍Java8日期时间API的新特性,以及如何使用这些API进行日期时间运算和格式化。 新特性 Java8日期时间API的新特性主要包括: 1. 时间计算的新API Ja…

    Java 2023年5月20日
    00
  • js函数获取html中className所在的内容并去除标签

    获取 HTML 中指定 className 所在的内容并去除标签,可以通过 JavaScript 函数来实现。下面是具体步骤: 选取需要获取 className 的元素 首先,需要通过 JavaScript 找到需要获取 className 的元素,可以使用 document.querySelector 或 document.querySelectorAll…

    Java 2023年6月15日
    00
  • JSP制作简单登录界面实例

    下面是在JSP中制作简单登录界面的完整攻略。 步骤1:创建JSP页面 首先,创建一个简单的JSP页面来显示登录表单。在该页面中添加必要的元素,如用户名、密码、提交按钮等。 示例代码: <!DOCTYPE html> <html> <head> <title>Login Page</title> &l…

    Java 2023年6月15日
    00
  • Java高级架构之FastDFS分布式文件集群详解

    Java高级架构之FastDFS分布式文件集群详解 FastDFS是一个开源的高性能分布式文件系统,可伸缩的分布式文件存储系统,是以跨平台、高效、高可靠性为特点的分布式文件系统,并以其优异性能成为国内外互联网公司分布式文件存储的不二之选。 概述 FastDFS是一个由跟踪服务器、存储服务器组成的分布式文件系统。跟踪服务器负责调度存储服务器,存储服务器则负责文…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部