【Java常用类】1-1 Object 和 Objects 类

§1-1 ObjectObjects

1-1.1 Object

Object 类位于 java.lang 包下,该类具有以下特点:

  • Object 类是所有类的直接父类或间接父类,是所有类的超类、基类,位于继承树的最顶层;

    Object 类是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

  • 任何类,若没有显式继承 Object 类,都默认继承该类,为隐式继承;

  • Object 类中所定义的方法,是所有对象都具备的方法;

  • Object 类型可以存储任何对象:

    作为参数,可接受任何对象;作为返回值,可返回任何对象。

Object 类中没有成员属性,因为没有哪一个属性是所有类都共有的,因此,Object 类的构造方法有且只有一个:

构造方法

构造方法 描述
Object() 空参构造

这也解释了其子类的空参构造方法中,为什么会有且只有一句 super(),调用父类 Object 的空参构造方法。

常用方法

方法 描述
native Object clone(); 创建并返回此对象的副本
final native Class<?> getClass(); 返回此 Object 的运行时类
native int hashCode(); 返回对象的哈希码值
String toString(); 返回对象的字符串表示形式
boolean equals(Object) 指示某个其他对象是否“等于”这个对象
void finalize(); 已弃用,终结机制是有问题的

注意

  • clone() 方法的重写和使用在面向对象章节中已作说明,此处不再赘述;

  • getClass() 方法的返回值是 Class 对象,常用 == 运算符比较两个对象所属实际存储类型是否相同;

  • 对于 Class 类,在注解与反射中有详细介绍;

  • hashCode() 方法会根据对象的地址,或字符串,或数字使用哈希算法计算得到 int 类型数值,一般情况下相同对象返回相同哈希值;

  • hashCode() 方法返回的一般为对象地址值的十六进制表示;

  • toString() 方法默认情况下返回 对象类型@十六进制哈希值,应当根据需求重写该方法;

  • 使用 System.out.println() 语句打印对象时,若对象不为 null,则会使用 toString() 方法将对象转换为字符串后输出;

  • equals() 方法默认比较的是两个对象的地址值,应当视需求重写此方法;

    示例String 类重写了 equals() 方法,使得该方法可以标胶两个字符串的内容是否相等,而不是地址值;

    注意

    • 在 IDEA 中按下组合键 Alt + insert 可选择重写 equals() 方法,此时 hashCode() 方法也会被一起重写;

    • 部分类会要求重写 equals() 方法的同时,还需要同时重写 hashCode() 方法;

    • 使用 IDEA 自动重写的 equals() 方法中,若类中含有引用数据类型,会发现调用了 Objects.equals() 方法;

  • finalize() 方法会在确定不存在对该对象的更多引用时,由对象的垃圾回收器调用;由于终结机制存在问题,该方法已被弃用;

  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象;

  • 垃圾回收:由 GC 销毁垃圾对象,释放存储空间。销毁对象前,会调用 finalize() 方法;

  • 自动回收机制:JVM 内存耗尽,一次性回收所有垃圾对象;

  • 手动回收机制:使用 System.gc(); 通知 JVM 执行垃圾回收,但是并不保证一定会被回收;

  • Object 类中还存在用于多线程的方法,此处先不做描述;

1-1.2 Objects

Objects 类位于 java.util 包下,是一个工具类,提供了一些操作对象,或操作前检查条件的方法。

不同于 Object 类,Objects 类的构造器私有化,不允许实例化。但其中的方法全部为静态方法,可供外界调用。

静态方法:(部分)

静态方法 描述
boolean equals(Object a, Object b) 先做非空判断,判断两个对象是否相等
boolean isNull(Object obj) 判断对象是否为空(null
boolean nonNull(Object obj) 判断对象是否非空

注意

  • equals() 方法会先比较二者是否为同一对象,若为否,则判断第一个参数是否为空,若不为空,最终调用对象所属类的 equals() 方法比较;
posted @ 2023-07-16 20:41  Zebt  阅读(87)  评论(0)    收藏  举报