JavaSE Object类
程序员文章站
2022-08-29 22:31:51
Java自我学习路线一、Object二、toString()三、equals四、finalize五、hashCode六、clone一、ObjectObject类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入任何一个类默认继承Object,就算没有直接继承,最终也会间接继承Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法。可以使用类型为Object的变量指向任意类型的对象什么是AP...
Java自我学习路线
一、Object
- Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入
- 任何一个类默认继承Object,就算没有直接继承,最终也会间接继承
- Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法。可以使用类型为Object的变量指向任意类型的对象
- 什么是API
API即应用程序编程接口,(Application Program Interface),整个JDK的类库就是一个JavaSE的API,SUN公司提前写好的这套类库就是API,一般每一个API都会配置一套API帮助文档
二、toString()
- 源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
源码上toString()方法的默认实现:
类名@对象的内存地址转换为十六进制的形式
- toString()的作用
通过调用这个方法可以将一个“Java对象”转换成“字符串表现形式” - SUN公司开发Java语言的时候,建议所有的子类都重写toString()方法
- System.out.println(引用); 这里会自动调用“引用”的toString()方法
- String类已经重写了toString()方法
三、equals
- 源码
public boolean equals(Object obj) {
return (this == obj);
}
- equals的作用
判断两个对象是否相等(基本数据类型比较时用:==;引用数据类型比较时用:equals方法) - 所有类的equals方法也需要重写,因为Object中的equals方法比较的是两个对象的内存地址,且重写equals方法的时候要彻底
- String类已经重写了equals方法,比较两个字符串不能使用“==”,必须使用equals
四、finalize
- 源码(since=“9”)
protected void finalize() throws Throwable {}
finalize()方法只有一个方法体,里面没有代码,并且这个方法由protected修饰
此方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法,finalize()只需要重写
- finalize()方法的执行时机
当一个Java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法,finalize()方法实际上是SUN公司为Java程序员准备的一个时机——垃圾销毁时机,如果希望在对象销毁时机执行一段代码当作 记录的话,这段代码要写到finalize()方法当中 - Java中的垃圾回收器不是轻易启动的,垃圾太少,或者时间没到等种种条件下,有可能启动,也有可能不启动
五、hashCode
- 源码
public native int hashCode();
这个方法不是抽象方法,带有native关键字,底层调用C++程序
- hashCode()方法返回的是哈希码:
实际上就是一个Java对象的内存地址,经过哈希算法,得出的一个值,所以hashCode()方法的执行结果可以等同看做一个Java对象的内存地址
public class Test01 {
public static void main(String[] args) {
Object o = new Object();
int hashCodeValue = o.hashCode();
// 对象内存地址经过哈希算法转换的一个数字,可以等同看做内存地址
System.out.println(hashCodeValue); // 366712642
MyClass mc = new MyClass();
int hashCodeValue2 = mc.hashCode();
System.out.println(hashCodeValue2); // 1829164700
MyClass mc2 = new MyClass();
System.out.println(mc2.hashCode()); // 2018699554
}
}
class MyClass {
}
六、clone
浅克隆:拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象
深克隆:不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象(就是把被克隆对象的实例变量中引用数据类型所指向的对象再new一遍)
本文地址:https://blog.csdn.net/LvJzzZ/article/details/107470474
上一篇: Lua性能优化技巧(三):关于表
下一篇: Lua 操作 MongoDB 数据库实例