Object类

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)); //异常
    }
}
原文地址:https://www.cnblogs.com/zongmin/p/11342745.html