0%

Object类学习

前言:Object类学习

简介

Java所有的类都会继承Object类,可以说Object类是所有类的父类,Object类位于java.lang包中,该包包含Java最基础和核心的类,编译时会自动导入。

image

构造方法

默认构造方法

1
public Object() {}

clone

创建并返回此对象的副本

该方法是用于拷贝对象的,需要实现java.lang.Cloneable接口,否则会抛出CloneNotSupportedException异常,然后重写Object类的clone方法
,默认是浅拷贝

1
protected native Object clone() throws CloneNotSupportedException;

equals

该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回true,否则返回false。

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

finalize

GC准备释放对象所占用的内存空间之前,JVM会调用该对象的finalize()方法,所以该方法只会执行一次。正常情况下,不需要实现这个方法

1
protected void finalize() throws Throwable { }

getClass

获取对象的运行时class对象,class对象就是描述对象所属类的对象。这个方法通常是和Java反射机制搭配使用的

1
public final native Class<?> getClass();

hashCode

获取对象的散列值,Object中该方法默认返回的是对象的堆内存地址

1
public native int hashCode();

notify

唤醒一个wait的线程,用于多线程间的通信

1
public final native void notify();

notifyAll

唤醒所有wait的线程,用于多线程间的通信

1
public final native void notifyAll();

registerNatives

RegisterNatives用于实现JNI,该方法顾名思义即注册本地方法,从而实现调用C语言等

1
2
3
4
private static native void registerNatives();
static {
registerNatives();
}

toString

返回一个可代表对象的字符串。默认返回格式如下:对象的class名称 + @ + hashCode的十六进制字符串

1
2
3
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

wait

使线程从运行状态到等待状态,并释放锁。其重载方法则是指定wait时间,用于多线程间的通信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public final void wait() throws InterruptedException {
wait(0);
}

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);
}
-------------本文结束感谢您的阅读-------------