Java基础知识3—Object类

Java基础知识(3)-Object类

​ 我们知道Java有两种数据类型,基本类型和引用类型。基本类型已经在我之前的博客介绍过了,这里就不细说了。那么另外一种类型是引用类型,在Java中所有引用类型的父类都是Object类,也就是说在我们所写的Java代码中,Object类是继承树的根节点。那么掌握Object类的方法对于我们来说是很有必要的。这里我们不考虑线程相关的方法notifynotifyAllwait

hashCode

我们可能都听说过什么重写了equals方法必须重写hashCode方法,那么什么是hashCode方法。首先我们得了解哈希表这种数据结构。

我们都知道数组是基于下标索引来访问存储单元的值(index - value),这种存储方式很不方便,所以计算机科学家研究出了哈希表这种数据结构,它是通过一个唯一索引来访问存储单元的值(key - value),那么哈希表的key就叫做哈希值。

Jvm中所有使用new操作符的对象实例都被分配到了堆Heap中,在堆里面有很多的对象实例,如果我们有一个值key可以唯一定位到堆内存中的对象,是十分方便实际开发的。所以hashCode方法返回的就是这个key

equals

在Object中这个equals方法其实判断的是对象是否指向同一个内存地址,那么也就只有对象本身才满足这种情况。源码如下:

public boolean equals(Object obj) {
    return this == obj;
}

那么这个方法在某些情况下并不适用,比如两个对象的属性一样我们就认为它是相等的。所以在实际开发中,我们可能会重写equals方法。

toString

toString方法就是它的字面意思,返回这个对象的字符串形式。那么在Object类中返回的是类名称和它的哈希值的十六进制形式,源码如下:

public String toString() {
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

​ 实际开发中,大多数情况我们会重写toString方法,打印对象的状态信息。

getClass

getClass方法是Object类中比较特殊的一个方法,它特殊就特殊在getClass是一个泛型方法,它返回的是实例对象的类对象,源码如下:

public final native Class<?> getClass();

clone

clone方法,这个方法也比较特殊,想要使用它必须实现Cloneable接口。这里有个设计模式叫做原型模式,所谓的原型模式就是以一个对象为模板快速生成一个新的对象。clone方法返回的是一个浅拷贝的对象。

finalize

finalize方法算是一个比较没用的方法,我们都知道Java是一个有垃圾回收的语言,所以我们Java程序员并不会关心什么时候回收一个对象,因为这些都由GC帮我们做了。finalize方法就是在GC回收对像前一刻调用,执行相关的清理操作,有点像C++里面的析构函数,可是在Java里面一个对象什么时候回收是不确定的,所以这个方法用处不大,我们更多时候是手动调用资源close方法关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值