java中的object类型_object与subject[通俗易懂]

java中的object类型_object与subject[通俗易懂]Object作为所有类的父类,是面向对象学习中最重要的一个类

一. Object类简介

Object类是Javajava.lang包下的核心类,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类;

以下两种类的定义的最终效果是完全相同的:

class Person { 
    }

class Person extends Object { 
    }

使用Object类型接收所有类的对象
在这里插入图片描述

Object 类属于java.lang包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入

Object 类的结构图(Object提供了11 个方法)
在这里插入图片描述
下面我们一个个方法进行分析,看这些方法到底有什么作用:

1. clone()

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2. getClass()

final方法,返回Class类型的对象,反射来获取对象。

3. toString()

该方法用得比较多,一般子类都有覆盖,来获取对象的信息。

4. finalize()

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5. equals()

比较对象的内容是否相等

6. hashCode()

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

7. wait()

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

  1. 其他线程调用了该对象的notify方法。
  2. 其他线程调用了该对象的notifyAll方法。
  3. 其他线程调用了interrupt中断该线程。
  4. 时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8. notify()

该方法唤醒在该对象上等待的某个线程。

9. notifyAll()

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


二. Object类的常用方法

方法名称 类型 描述
toString( ) 普通 取得对象信息
equals() 普通 对象内容比较

toString方法

toString():取得对象信息,返回该对象的字符串表示

我们先看一个简单的例子:
在这里插入图片描述

输出:iqqcode.algorithm.bintree.Person@1ee12a7

在使用对象直接输出的时候,默认输出的是一个对象在堆内存上的地址值;如若要输出该对象的内容,则要覆写toString()方法

覆写Person中的toString()方法
在这里插入图片描述

名字为:Mr.Q 年龄为:20

toString( )的核心目的在于取得对象信息

String作为信息输出的重要数据类型,在Java中所有的数据类型只要遇见String就执行了+,都要求其变为字符串后连接,而所有对象想要变为字符串就默认用toString( )方法

例如:

System.out.println("hello" + 123);

>>> 输出:hello 123

为什么hello 和 123 (一个是字符串,一个是int类型的数据) 就可以直接拼接在一起呢?

因为字符串是爸爸,在这个拼爹的时代,他有一个万能的爸爸Object

换而言之,Object是所有类的父类,任意类都是继承Object类的。而Object中定义了 toString()方法,所以任意类中都包含了toString()方法,对象在实例化之后都可以调用。

所以任意对象转字符串的输出,是通过覆写 toString()方法实现的…

每一个类中都包含有toString(),但是并不是每一个类都覆写了toString()
在这里插入图片描述
在这里插入图片描述
在源码中,可以发现通过反射,获取到了当前对象的全限定类名和@十六进制哈希值字符串。这就是不覆写toString()时直接打印输出的内容。


equals方法

equals():对象比较

String类对象比较 使用的是 equals()方法,实际上String类的equals()方法就是覆写 Object类中的equals()方法

  • 基本数据类型的比较用 == (如: a == 3,b == 4, a == b,比较的是值是否相等)
  • 引用类型数据比较:调用 equals()方法进行比较

​​用equals( )来比较对象内容是否相同:
​​在这里插入图片描述
两个对象per1和per2的内容明明相等,应该是true呀?怎么会是false?

因为此时直接调用equals()方法默认进行比较的是两个对象的地址。

在源码中,传递来的Object对象和当前对象比较地址值,返回布尔值。
在这里插入图片描述
但是,new一下就会在堆上创建新空间,两个对象地址自然不会相同,所以为false。

但是在判断两个对象是否相等时,比如要判断一个Person类的两个对象的姓名是否相同时,此时要重新覆写equals()

还是上面的例子,覆写equals()方法
在这里插入图片描述

比较结果:true

所以,引用类型的数据在进行比较时,应该先覆写equals()方法,不然比较的还是两个对象的堆内存地址值,必然不会相等.


其他相关方法详解

  • 🎈wait-notify方法 线程间的同步通信相关
  • 🍳getClasss方法 反射相关
  • 📦对象的finalize机制-finalize方法 垃圾回收相关,对象的自我拯救机制

今天的文章java中的object类型_object与subject[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/77795.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注