一切皆对象,Object类

本文深入解析Java中Object类的11个核心方法,包括toString(), equals(), hashcode(), clone(), finalize(), getClass()等,探讨它们的功能及重写原则,适合初学者及进阶开发者参考。

我作为一个小白的学习成长笔记,难免有错~

Object类是所有类的父类,如果一个没有用extends明确指出继承于某个类,则它默认继承object类。这里总结object类的11个方法;
1.toString()

toString()源码
该方法在打印对象时将被调用,将对象信息变为字符串返回,默认输出的是对象地址。
举个栗子?
输出结果
输出结果
编译器默认调用toString()方法输出的是对象地址,如果需要输出对象属性信息,则需要重写Object类的toString()方法。

2.equals()
equals()源码
该方法用于比较对象是否相等,而且该方法必须被重写!
举个栗子?
输出结果
输出结果
equals()方法比较的是两个对象的地址

3.hashcode()
hashcode()源码
该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashcode。
栗子?
栗子?
输出结果
输出结果
当你重写override了equals()方法之后,必须也override重写hashcode()方法,反之亦然。

4.clone()
源码
实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的条件是:
1️⃣实现Cloneable接口,这是一个标记接口,自身没有方法。
2️⃣覆盖clone()方法,可见性提升为public。
https://blog.youkuaiyun.com/qq_33314107/article/details/80271963
5.finalize()
源码
finalize先了解下,后面学到GC相关内容,再深入学习。
https://www.cnblogs.com/smilesmile/p/3849122.html

6.getClass()
getclass()方法可以获取一个对象的类型类,进而通过返回的Class对象获取类的相关信息,比如,父类的名字,该类的名字。
源码
举个栗子?
运行结果
运行结果

下面几个方法学习到线程相关知识的时候再补充~
7.wait()
8.notify()
9.notifyAll()

### Python 中一切对象的含义及原理 #### 含义 在 Python 中,“一切对象”的核心理念是指所有的数据、变量以及函数都可以被视作对象处理。这意味着无论是内置的数据型(如 `int`、`str`)、用户定义的还是函数本身,在底层都被视为对象并具有统一的操作方式[^1]。 具体而言,Python 的设计哲学使得每一个实体都拥有属性和方法,并可以通过这些特性进行交互。例如,整数型的数值也可以调用其自身的成员方法: ```python number = 42 print(number.bit_length()) # 调用了 int 对象方法 bit_length() ``` 这种设计理念极大地增强了语言的一致性和灵活性。 --- #### 原理分析 为了深入理解这一概念,可以从以下几个方面展开讨论: ##### 1. **对象的关系** 在 Python 中,所有事物最终都会追溯到两个基本概念:`object` 和 `type`。 - 所有均直接或间接继承自基 `object`[^3]。 - 每个本质上是一个由 `type` 创建的对象,而 `type` 自身也是一种特殊的——它既是普通的又是元(即用于创建其他)。因此形成了如下关系链: ```plaintext class MyClass(object): pass isinstance(MyClass, type) -> True # MyClass 是 type 的实例 issubclass(type, object) -> True # type 继承object ``` 上述逻辑表明,即使是用来定义新的工具 (`type`) 也遵循同样的规则,体现了高度抽象的设计思路。 ##### 2. **标准型层次结构** 进一步观察 Python 的标准库文档可知,整个语言构建了一个清晰有序的标准型体系[^4]。在这个框架里,基础构件如字符串(`str`)、列表(`list`)等无一例外均为特定别下的实例;甚至连看似不属于传统意义上的“值型”范畴的部分—比如模块(module)—同样能作为独立个体存在。 举几个例子验证这一点: ```python import math print(isinstance(math.sqrt, object)) # 函数 sqrt() 属于 object print(isinstance(int, object)) # 整形描述符属于 object print(isinstance(list.append, object)) # 方法 append() 属于 object ``` 以上测试全部返回 `True` ,再次证明无论多么复杂的表达形式背后总能找到对应的物理载体支撑运行时行为表现出来. ##### 3. **特殊性质 - Type 自指现象** 特别值得注意的是关于 `type` 这种自我循环引用的现象[^5]: - 当询问某个已知种的东西是什么时候产生的时候 (譬如问 '什么是 str ?'), 我们会得到答案说它是另一个叫做 "type" 的东西制造出来的. - 反过来如果我们继续追问这个所谓的 “type” 到底又是什么呢? 结果发现原来他自己也是通过相同的机制造就而成! 换句话说就是: ```python print(type(str)) # 输出:<class 'type'> print(type(type)) # 输出:<class 'type'> ``` 这形成了一种奇妙却合理存在的闭环状态,既保持了理论上的严谨同时也方便实际应用中的操作简便性考虑到了很多细节之处做了优化改进措施等等一系列优点所在共同构成了如今广受欢迎使用的高级脚本编程环境之一 —— Pyhton ! --- ### 总结 综上所述,"Everything Is An Object"(EIAO) 不仅是一句口号而已而是贯穿始终指导原则影响着方方面面包括但不限于语法糖衣包裹之下隐藏起来的真实面貌揭示给我们看到更多可能性的同时也让开发者更容易理解和掌握复杂多变的实际场景需求变化趋势走向未来发展方向做出更加明智合理的决策判断依据参考资料链接地址如下所示供有兴趣的朋友自行查阅学习提高自身技术水平能力水平达到更高层次境界享受创作乐趣无穷尽矣! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值