Object通用方法
Object 类是所有类、数组、枚举类的父类,也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量,当一个类时没有使用显式继承某个类时 , 默认继承 Object 类。
因为所有的 Java 类都是 Object 类的子类,所以任何 Java 对象都可以调用 Object 类的方法。Object 类提供了如下几个常用方法。
equals
public boolean equals(Object obj);
equals()
是用来判断两个对象是否等价。默认情况下, equals 方法等同于 == 运算符,对于基本类型判断值是否相等,对于引用类型判断指向的是否为同一个对象,所有引用类型一般要重写 equals 方法。
hashCode
public native int hashCode() ;
native 说明该方法是原生方法,也就是这个方法是用 C/C++
语言实现的,并且被编译成了DLL,由 java 去调用。
hashCode() 方法返回散列值。默认情况下,hashCode 是根据对象地址计算的,一般要重写根据对象数据计算,要求 equals() 返回 true 的同时,hashCode() 返回值相等,尤其对于 HashMap 和 HashSet 基于哈希表运算的数据结构。
toString
public String toString();
返回该对象的字符串。默认情况下,返回 ”运行时类名@十六进制 hashCode 值” 格式字符串,一般要重写,返回对象的重要信息。
clone
protected native Object clone() throws CloneNotSupportedException;
clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法。
//Cloneable是一个标记性接口,里面什么都没定义
//如果一个类没有实现Cloneable接口而调用了clone()方法,会抛出异常
public class A implements Cloneable {
@Override
public A clone() throws CloneNotSupportedException {
//super.clone()会返回该对象的副本
return (A)super.clone();
}
public static void main(String[] args) {
A a1 = new A();
A a2 = null;
try {
a2 = a1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println(a1 == a2); //false
}
}
需要指出,Object 的 clone() 只是一种 “浅拷贝”,它只克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,所以 “深拷贝” 还需要自己编写。
getClass
public final native Class<?> getClass();
返回该对象运行时类。
finalize
protected void finalize() throws Throwable;
当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
控制线程
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException;
public final void wait() throws InterruptedException;
Objects工具类
Java 为工具类的命名习惯是添加一个字母 s,比如操作数组的工具类是 Arrays,操作集合的工具类 Collections。
public class A {
//定义一个 obj 变量,默认值为 null
static A obj;
public static void main(String[] args) {
//计算一个null对象的hashCode值
System.out.println(Objects.hashCode(obj)); //0
//输出一个null对象的 toString
System.out.println(Objects.toString(obj)); //null
//要求obj不能为null,如果obj为null抛出异常
System.out.println(Objects.requireNonNull(obj)); //异常
}
}