Java SE入门及基础(37)

Object 类常用方法

        Object类中定义的方法大多数都是属于 native 方法, native 表示的是本地方法,实现方式是在 C++ 中。

1. getClass()

public final Class getClass ()
//The getClass() method returns a Class object, which has methods you can use to get information about the //class, such as its name (getSimpleName()), its superclass (getSuperclass()), and the interfaces it //implements (getInterfaces()).
//getClass() 方法返回一个 Class 对象,该对象具有可用于获取有关该类的信息的方法,例如其名称 (getSimpleName()),其超类 //(getSuperclass()) 及其实现的接口 (getInterfaces())
 示例
package com . we . polymorphism . object ;
import com . we . polymorphism . device . TV ;
public class ObjectTest {
        public static void main ( String [] args ) {
                TV tv = new TV ();
                Class clazz = tv . getClass ();
                String name = clazz . getSimpleName (); // 获取类名
                System . out . println ( name );
                String className = clazz . getName (); // 获取类的全限定名
                System . out . println ( className );
                Class superClass = clazz . getSuperclass (); // 获取父类的定义信息
                String superName = superClass . getSimpleName (); // 获取父类的名称
                System . out . println ( superName );
                String superClassName = superClass . getName (); // 获取父类的全限定名
                System . out . println ( superClassName );
                String s = "admin" ;
                Class stringClass = s . getClass ();
                Class [] interfaceClasses = stringClass . getInterfaces ();
                for ( int i = 0 ; i < interfaceClasses . length ; i ++ ){
                        Class interfaceClass = interfaceClasses [ i ];
                        String interfaceName = interfaceClass . getSimpleName (); // 获取接口的名称
                        System . out . println ( interfaceName );
                        String interfaceClassName = interfaceClass . getName (); // 获取接口的全限定名
                        System . out . println ( interfaceClassName );
                }
        }
}

2. hashCode()

public int hashCode ()
//The value returned by hashCode() is the object's hash code, which is the object's memory address in //hexadecimal.
//hashCode() 返回值是对象的哈希码,即对象的内存地址(十六进制)。
//By definition, if two objects are equal, their hash code must also be equal. If you override the equals() //method, you change the way two objects are equated and Object's implementation of hashCode() is no longer //valid. Therefore, if you override the equals() method, you must also override the hashCode() method as //well.
// 根据定义,如果两个对象相等,则它们的哈希码也必须相等。 如果重写 equals() 方法,则会更改两个对象的相等方式,并且Object
//hashCode() 实现不再有效。 因此,如果重写 equals() 方法,则还必须重写 hashCode()
法。
        Object类中的 hashCode() 方法返回的就是对象的内存地址。一旦重写 hashCode() 方法,那么 Object 类中的 hashCode() 方法就是失效,此时的 hashCode() 方法返回的值不再是内存地址。
示例
package com . we . polymorphism . hashcode ;
public class Student {
        private String name ;
        private int age ;
        public Student ( String name , int age ) {
                this . name = name ;
                this . age = age ;
        }
        //hashCode()方法被重写之后,返回的值就不在是对象的内存地址
        @Override
        public int hashCode () {
                return 1 ;
        }
}
package com . we . polymorphism . hashcode ;
public class StudentTest {
        public static void main ( String [] args ) {
                Student s1 = new Student ( " 张三 " , 1 );
                Student s2 = new Student ( " 张三 " , 1 );
        }
}

3. equals(Object obj)

public boolean equals ( Object obj )
//The equals() method compares two objects for equality and returns true if they are equal. The equals() //method provided in the Object class uses the identity operator (==) to determine whether two objects are //equal. For primitive data types, this gives the correct result. For objects, however, it does not. The //equals() method provided by Object tests whether the object references are equal—that is, if the objects //compared are the
exact same object.
//equals() 方法比较两个对象是否相等,如果相等则返回 true Object 类中提供的 equals() 方法使用身份运算符(== )来确定两个对象是
// 否相等。 对于原始数据类型,这将给出正确的结果。 但是,对于对象,则不是。 Object 提供的equals()方法测试对象引用是否相等,即
// 所比较的对象是否完全相同。
//To test whether two objects are equal in the sense of equivalency
(containing the same information), you //must override the equals() method.
// 要测试两个对象在等效性上是否相等(包含相同的信息),必须重写 equals ()方法。
示例
package com . we . polymorphism . hashcode ;
public class Student {
        private String name ;
        private int age ;
        public Student ( String name , int age ) {
                this . name = name ;
                this . age = age ;
        }
        //1. 比较内存地址
        //2. 检测是否是同一类型
        //3. 检测属性是否相同
        @Override
        public boolean equals ( Object o ) {
                if ( this == o ) return true ;
                //比较类的定义是否一致
                if ( this . getClass () != o . getClass ()) return false ;
                //类的定义一致,那么对象o 就可以被强制转换为 Student
                Student other = ( Student ) o ;
                return this . name . equals ( other . name ) && this . age == other . age ;
        }
        //hashCode()方法被重写之后,返回的值就不在是对象的内存地址
        @Override
        public int hashCode () {
                return name . hashCode () + age ;
        }
}
package com . we . polymorphism . hashcode ;
public class StudentTest {
        public static void main ( String [] args ) {
                Student s1 = new Student ( " 张三 " , 1 );
                Student s2 = new Student ( " 张三 " , 1 );
                boolean result = s1 . equals ( s2 );
                System . out . println ( result );
                System . out . println ( s1 . hashCode ());
                System . out . println ( s2 . hashCode ());
        }
}
        根据定义,如果两个对象相等,则它们的哈希码也必须相等,反之则不然。
        重写了equals 方法,就需要重写 hashCode 方法,才能满足上面的结论
面试题:请描述 == equals 方法的区别
        基本数据类型使用 == 比较的就是两个数据的字面量是否相等。引用数据类型使用 == 比较的是内存地址。equals 方法来自 Object 类,本身实现使用的就是 == ,此时它们之间没有区别。但是 Object 类中的equals方法可能被重写,此时比较就需要看重写逻辑来进行。

4. toString()

public String toString ()
//You should always consider overriding the toString() method in your classes.
// 你应该始终考虑在类中重写 toString() 方法。
//The Object's toString() method returns a String representation of the object, which is very useful for //debugging. The String representation for an object depends entirely on the object, which is why you need //to override toString() in your classes.
//Object toString() 方法返回该对象的 String 表示形式,这对于调试非常有用。 对象的 String
表示形式完全取决于对象,这就是为什么
// 你需要在类中重写 toString() 的原因。
示例
package com . we . polymorphism . hashcode ;
public class Student {
        private String name ;
        private int age ;
        public Student ( String name , int age ) {
                this . name = name ;
                this . age = age ;
        }
        //如果两个对象相等,那么它们的哈希码一定相等。反之则不然。
        //如果重写了 equals 方法,那么一定要重写 hashCode 方法。因为不重写 hashCode 方法
        //就会调用 Object 类中的 hashCode 方法,得到的是内存地址。不同对象的内存地址是
        //不一致的。但是 equals 方法重写后,比较的不是内存地址,而是对象的内部信息,这样
        //就会造成多个不同的对象相等但却拥有不同的哈希码
        @Override
        public boolean equals ( Object o ) {
                if ( this == o ) return true ;
                //比较类的定义是否一致
                if ( this . getClass () != o . getClass ()) return false ;
                //类的定义一致,那么对象o 就可以被强制转换为 Student
                Student other = ( Student ) o ;
                return this . name . equals ( other . name ) && this . age == other . age ;
        }
        //hashCode()方法被重写之后,返回的值就不在是对象的内存地址
        @Override
        public int hashCode () {
                return name . hashCode () + age ;
        }
        @Override
        public String toString () {
                return name + "\t" + age ;
        }
}
package com .we. polymorphism . hashcode ;
public class StudentTest {
        public static void main ( String [] args ) {
                Student s1 = new Student ( " 张三 " , 1 );
                System . out . println ( s1 );
        }
}

5. finalize()

protected void finalize () throws Throwable
//The Object class provides a callback method, finalize(), that may be
invoked on an object when it becomes //garbage. Object's implementation of
finalize() does nothing—you can override finalize() to do cleanup, //such as
freeing resources.
//Object 类提供了一个回调方法 finalize (),当该对象变为垃圾时可以在该对象上调用该方法。Object类的 finalize() 实现不执行任何
// 操作 - 你可以覆盖 finalize ()进行清理,例如释放资源。
示例
package com . we . polymorphism . hashcode ;
public class Student {
        private String name ;
        private int age ;
        public Student ( String name , int age ) {
                this . name = name ;
                this . age = age ;
        }
        //如果两个对象相等,那么它们的哈希码一定相等。反之则不然。
        //如果重写了 equals 方法,那么一定要重写 hashCode 方法。因为不重写 hashCode 方法
        //就会调用 Object 类中的 hashCode 方法,得到的是内存地址。不同对象的内存地址是
        //不一致的。但是 equals 方法重写后,比较的不是内存地址,而是对象的内部信息,这样
        //就会造成多个不同的对象相等但却拥有不同的哈希码
        @Override
        public boolean equals ( Object o ) {
                if ( this == o ) return true ;
                //比较类的定义是否一致
                if ( this . getClass () != o . getClass ()) return false ;
                //类的定义一致,那么对象o 就可以被强制转换为 Student
                Student other = ( Student ) o ;
                return this . name . equals ( other . name ) && this . age == other . age ;
        }
        //hashCode()方法被重写之后,返回的值就不在是对象的内存地址
        @Override
        public int hashCode () {
                return name . hashCode () + age ;
        }
        @Override
        public String toString () {
                return name + "\t" + age ;
        }
        //当一个 Student 对象变成垃圾时可能会被调用
        @Override
        protected void finalize () throws Throwable {
                this . name = null ;
                System . out . println ( " 所有资源已释放完毕,可以进行清理了 " );
        }
}
package com . we . polymorphism . hashcode ;
public class StudentTest {
        public static void main ( String [] args ) {
                show ();
                //garbage collector
                System . gc (); // 调用系统的垃圾回收器进行垃圾回收
                System . out . println ( " 这是最后一行代码了 " );
        }
        public static void show (){
                //s对象的作用范围只是在show() 方法中,一旦方法执行完毕,那么
                //s对象就应该消亡,释放内存
                Student s = new Student ( " 李四 " , 20 );
                System . out . println ( s );
        }
}

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

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

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

相关文章

【算法】KY67 整数奇偶排序

描述 输入10个整数&#xff0c;彼此以空格分隔。重新排序以后输出(也按空格分隔)&#xff0c;要求: 1.先输出其中的奇数,并按从大到小排列&#xff1b; 2.然后输出其中的偶数,并按从小到大排列。 输入描述&#xff1a; 任意排序的10个整数&#xff08;0&#xff5e;100&#x…

灰度发布难以追踪?你可能用错了工具

灰度发布进行可观测性的主要方式是通过收集和分析用户在使用新版本产品或服务时的数据&#xff0c;以此来评估新版本的性能、稳定性和用户满意度。这个过程通常包括以下几个步骤&#xff1a; 定义观测指标&#xff1a;首先&#xff0c;需要定义一套合适的观测指标&#xff08;…

Java Day7 常用API

文章目录 1、Arrays1.1 简述1.2 如何比较对象数组1.2.1 方法1.1.2.2 方式2 2、Lambda3、方法引用3.1 静态方法的引用3.2 实例方法引用3.3 特定类型方法引用3.4 构造器引用 1、Arrays 1.1 简述 操作数组的一个工具类 常见方法 int[] arr{10,20,30,50,40};//将 数组的内容 组…

彩色gif闪图怎么做?分享gif动画的方法

在现在的媒体时代&#xff0c;动态图片已经成为了最流行的分享信息的方式。能够传达动态的视觉效果。那种带有动态效果的闪动文字图片要怎么制作呢&#xff1f;很简单&#xff0c;通过使用在线制作闪字图片工具&#xff0c;上传多张文字内容相同&#xff0c;颜色、位置不同的jp…

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…

C语言函数—库函数

函数是什么&#xff1f; 数学中我们常见到函数的概念。但是你了解C语言中的函数吗&#xff1f; 维基百科中对函数的定义&#xff1a;子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, ca…

VSCode调试C++项目时无法显示长字符串的所有内容

记录一次失败的尝试&#xff0c;参考解决vs code 调试golang时字符串显示不全的问题。_golang gin buf数据不全-CSDN博客 但是笔者当前使用的VSCode版本不支持在launch.json中添加dlvLoadConfig选项 笔者的思路是如果VSCode不支持&#xff0c;那就下降到下一层&#xff0c;VSC…

c++初阶------类和对象(下)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

判断、v-if判断显示隐藏,功能区循环案例。

判断条件 1.第一种 如果身份是管理员 &#xff0c; 那么全部显示 如果身份是员工 &#xff0c;那么除了value等于1的全部都显示 v-if"( user.state.level admin) || ( user.state.level staff && item.value ! 1)"<view class"funcBox">&…

Solidity Uniswap V2 factory contract

factory contract 工厂合约是所有已部署pair合约的注册表。我们不希望出现相同的pair&#xff0c;这样流动性就不会被分割成多个。factory合约还简化了pair合约的部署&#xff1a;无需手动部署pair合约&#xff0c;只需调用factory合约中的方法即可。 https://github.com/XuHug…

马斯克将在本周,开源类ChatGPT产品Grok

3月11日晚&#xff0c;马斯克在社交平台宣布&#xff0c;将在本周开源生成式AI产品——Grok。 Grok是马斯克旗下公司xAI在去年11月发布的&#xff0c;一款类ChatGPT产品&#xff0c;可以提供生成文本、代码、邮件、信息检索等功能。其测试性能超过GPT-3.5、LLaMA 2 70B&#x…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模…

Linux运维:深入了解 Linux 目录结构

Linux运维&#xff1a;深入了解 Linux 目录结构 一、 Linux 目录结构与 Windows之间的主要区别二、Linux根目录结构三、常见目录及其作用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 一、 Linux 目录结构与 Windows之间的主要区别 1、根…

2024年备考软考,别犯这些常见错误!

距离2024年上半年软考正式考试还剩不到八十天的时间&#xff0c;留给考生的备考时间越来越少&#xff0c;因此大家在学习时要避免犯一些常见错误&#xff0c;尽量不浪费宝贵的学习时间&#xff0c;科学备考。 误区一&#xff1a;不制定学习计划 不制定学习计划意味着缺乏系统…

Kafka常见使用问题

消息丢失 生产者方&#xff1a;设置ack为1或-1/all可以防止生产的消息丢失&#xff0c;如果要做到生产消息成功率提高到最高&#xff0c;ack设置成all&#xff0c;把min.insync.replicas配置成分区备份数&#xff0c;把ack设置成1或者-1/all&#xff0c;这样生产者生产的消息发…

vivado clock ip核的使用

clock 偶数倍分频就是进行计数器计数&#xff0c;奇数倍分频如果不要求占空比的话也是进行计数&#xff0c;如果要求0.5的占空比的话&#xff0c;则需要进行两个计数器&#xff0c; 对于实现占空比为50%的N倍奇数分频&#xff0c;我们可以分解为两个通道&#xff1a; 上升沿触…

数据拯救指南:解决文件或目录损坏且无法读取的终极策略

在日常的计算机使用中&#xff0c;我们经常会遇到文件或目录损坏且无法读取的困扰。当这类问题发生时&#xff0c;无论是重要的文档、照片还是视频文件&#xff0c;都可能会变得无法访问&#xff0c;给我们的工作和生活带来极大的不便。面对这种情况&#xff0c;我们首先需要了…

落地灯哪个牌子好?五款品质可靠的落地灯,各具亮点

近年来&#xff0c;落地灯作为最适合目前用眼人群使用的照明电器&#xff0c;以显著的照明效果获得了广泛认可&#xff0c;并成为众多学生党、上班族用眼时的必备工具。其受欢迎的程度不断攀升&#xff0c;促使越来越多的人都选择入手落地灯。然而&#xff0c;我发现市场上也有…

关于JSP的打印调试,再来一篇巩固巩固

JSP实质上就是html混入了Java&#xff0c;或者说是HTMLJavaScriptCSSJava的混合⽂件&#xff0c;那么就会牵扯到各种语言之间的变量引用问题&#xff0c;既然基础是html&#xff0c;那么就先看看html怎么引用其他内容&#xff0c;以及其他内容间值的互引用。 1、Html获取JavaS…

数据结构之栈详解(C语言手撕)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…