【Java常用类】1-1 Object 和 Objects 类
§1-1 Object
和 Objects
类
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()
方法比较;