当前位置: 移动技术网 > IT编程>开发语言>Java > JavaSE Object类

JavaSE Object类

2020年07月22日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网