Java中Object的常用方法

2024-09-03 04:20
文章标签 java 方法 object 常用

本文主要是介绍Java中Object的常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. toString()

toString() 方法返回一个表示该对象的字符串。默认情况下,这个方法返回对象的类名、@"符号以及对象的哈希码的十六进制表示。通常情况下,会覆盖这个方法以提供更有意义的字符串表示。

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public static void main(String[] args) {Person person = new Person("Alice", 30);System.out.println(person.toString()); // 输出 Person{name='Alice', age=30}}
}

2. equals(Object obj)

equals() 方法用于比较两个对象是否相等。默认实现仅检查对象引用是否相同。通常会重写这个方法来实现更具体的逻辑,比如根据对象的某些属性来判断。

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Person person = (Person) obj;return age == person.age &&name.equals(person.name);}public static void main(String[] args) {Person alice1 = new Person("Alice", 30);Person alice2 = new Person("Alice", 30);System.out.println(alice1.equals(alice2)); // 输出 true}
}

3. hashCode()

hashCode() 方法返回一个整数形式的哈希码值。当两个对象根据 equals() 方法比较相等时,它们的 hashCode() 必须也相等。通常,当重写了 equals() 方法时,也应该重写 hashCode() 方法。

public class Person {private String name;private int age;// ... (构造器和属性省略)@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}// ... (equals 方法省略)
}// 在 main 方法中测试
System.out.println(alice1.hashCode()); // 输出一个哈希码值
System.out.println(alice2.hashCode()); // 输出相同的哈希码值

4. clone()

clone() 方法创建并返回一个对象的副本。需要注意的是,只有实现了 Cloneable 接口的类才能安全地调用 clone() 方法。

public class Person implements Cloneable {private String name;private int age;// ... (构造器和属性省略)@Overrideprotected Person clone() throws CloneNotSupportedException {return (Person) super.clone();}public static void main(String[] args) throws CloneNotSupportedException {Person alice = new Person("Alice", 30);Person clonedAlice = alice.clone();System.out.println(clonedAlice == alice); // 输出 falseSystem.out.println(clonedAlice.equals(alice)); // 输出 true}
}

5. getClass()

getClass() 方法返回代表该对象的类的 Class 对象。

public class Person {// ... (类定义省略)public static void main(String[] args) {Person alice = new Person("Alice", 30);Class<?> clazz = alice.getClass();System.out.println(clazz.getName()); // 输出 com.example.Person (假设包名为 com.example)}
}

6. notify(), notifyAll(), wait()

这些方法与线程同步相关,用于控制对象的锁。notify() 唤醒正在等待该对象锁的一个线程,notifyAll() 唤醒所有等待该对象锁的线程,而 wait() 则让当前持有该对象锁的线程进入等待状态。

public class Example {public static void main(String[] args) {final Object lock = new Object();Thread t1 = new Thread(() -> {synchronized(lock) {try {System.out.println("Thread 1 waiting.");lock.wait(); // 释放锁并等待System.out.println("Thread 1 resumed.");} catch (InterruptedException e) {e.printStackTrace();}}});Thread t2 = new Thread(() -> {synchronized(lock) {System.out.println("Thread 2 notifying.");lock.notify(); // 唤醒等待的线程}});t1.start();t2.start();}
}

这篇关于Java中Object的常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132005

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory