欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaSE Object类

程序员文章站 2022-04-10 19:29:20
Java自我学习路线一、Object二、toString()三、equals四、finalize五、hashCode六、clone一、ObjectObject类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入任何一个类默认继承Object,就算没有直接继承,最终也会间接继承Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法。可以使用类型为Object的变量指向任意类型的对象什么是AP...

一、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