Object类
如果一个类没有指定父类,默认就是继承Object类。
Object类里面共有11个方法:
经常用到的equals(),toString()都是直接使用或者重写的Object里面的这些方法;
另外还有final native修饰的方法:反射需要用到的getClass(),线程操作需要的notify(),notifyAll(),wait(long timeout);
还有native修饰的方法:hashCode()和clone()
返回值 | 方法名 | 作用 |
---|---|---|
protected Object | clone() | 创建并返回此对象的副本 |
boolean | equals(Object obj) | 判断一些其他对象是否等于此 |
protected void | finalize() | 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象 |
Class<?> |
getClass() | 返回此Object的运行时类 |
int | hashCode() | 返回对象的哈希码值 |
void | notify() | 唤醒正在等待对象监视器的单个线程 |
void | notifyAll() | 唤醒正在等待对象监视器的所有线程 |
String | toString() | 返回对象的字符串表示形式 |
void | wait() | 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法 |
void | wait(long timeout) | 导致当前线程等待,直到另一个线程调用 notify()方法或该对象的 notifyAll()方法,或者指定的时间已过 |
void | wait(long timeout, int nanos) | 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者某些其他线程中断当前线程,或一定量的实时时间 |
Object类
package java.lang;
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
protected native Object clone() throws CloneNotSupportedException;
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
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 {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
public final void wait() throws InterruptedException {
wait(0);
}
protected void finalize() throws Throwable { }
}
Objects类
Objects类是final修饰的类,不可继承,内部方法都是static方法,从jdk1.7开始才引入了Objects类
返回值 | 方法名 | 作用 |
---|---|---|
static |
compare(T a, T b, Comparator<? super T> c) | 如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果 |
static boolean | deepEquals(Object a, Object b) | 对比a,b参数是否深层次相等,假定a,b为数组,对比数组的每个参数 |
static boolean | equals(Object a, Object b) | 对比a,b参数是否相等 |
static int | hash(Object… values) | 为输入值序列生成哈希码 |
static int | hashCode(Object o) | 返回哈希码。如果o为null则返回0 |
static boolean | isNull(Object obj) | 如果obj参数为null返回true |
static boolean | nonNull(Object obj) | 如果obj参数不为null返回true |
static |
requireNonNull(T obj) | 检查指定的对象引用不是 null,为null报空指针错误 |
static |
requireNonNull(T obj, String message) | 检查指定的对象引用不是null并抛出自定义的NullPointerException(如果是) |
static |
requireNonNull(T obj, Supplier |
检查指定的对象引用不是null并抛出一个自定义的NullPointerException(如果是) |
static String | toString(Object o) | 返回对象的字符串表示形式 |
static String | toString(Object o, String nullDefault) | 如果第一个参数不是 null ,则返回第一个参数调用 toString的结果,否则直接将第二个参数nullDefault返回 |
Objects类
package java.util;
import java.util.function.Supplier;
public final class Objects {
private Objects() {
throw new AssertionError("No java.util.Objects instances for you!");
}
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
public static String toString(Object o) {
return String.valueOf(o);
}
public static String toString(Object o, String nullDefault) {
return (o != null) ? o.toString() : nullDefault;
}
public static <T> int compare(T a, T b, Comparator<? super T> c) {
return (a == b) ? 0 : c.compare(a, b);
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
public static boolean isNull(Object obj) {
return obj == null;
}
public static boolean nonNull(Object obj) {
return obj != null;
}
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}
}