java.lang.object 下载_(2)java.lang.Object

java.lang.Object

所有类都直接或间接继承该类

1、类结构

public class Object

2、native

native方法:指非Java语言写的方法,一般是系统提供的,对底层进行直接操作。由关键字native声明,jvm进行调用。

(除非是开始系统深入学习虚拟机,否则很难,也没有必要学习native的实现)

private static native void registerNatives();

static {

registerNatives();

}

registerNatives方法具体做什么暂时不用研究,按名字大概是对本类中的native方法进行注册

该方法出现的类一定有其它native方法,比如java.lang.System。

而包含native方法的类也可能没有该方法,比如java.lang.String。

3、构造方法

只有默认的构造方法

4、 其它方法

(1)克隆

protected native Object clone() throws CloneNotSupportedException;

对象克隆,需要实现java.lang.Cloneable接口,然后重写Object的clone方法。

浅拷贝:只是创建新的对象,对象属性是原对象的属性

深拷贝:不仅创建新的对象,同时对原属性也进行创建。

第三种方案:不实现java.lang.Cloneable,而是实现java.io.Serializable接口完成深拷贝

(2)等于

==:

不能判断基本数据类型和一个引用数据类型

判断两个引用数据类型是判断地址

判断两个基本数据类型是判断值

同时boolean类型不能和其它基本类型比较

public boolean equals(Object obj) {

return (this == obj);

}

只有非null的引用数据类型对象才能调用equas方法

this指代本类的当前对象

比较的几个准则:

自反性:a.equals(b)为true,反之b.equals(a)也为true,false是一样的,obj为null除外。

传递性:a.equals(b)为true,b.equals(c)为true,则a.equals(c)也为true

持久性:只要本身没有发生改变,a.equals(b)的结果应该一直不变

a.equals(b),b为null则结果为false

在子类重写equals方法时也应该遵守这几条规则。

(3)finalize完成

protected void finalize() throws Throwable { }

是手动进行资源回收的,慎用。

在Java11被废弃

(4)hash码

public native int hashCode();

哈希算法:指一种算法模型,具体由其它算法实现,比如md4,md5。

该算法是单向的,即只能加密而无法解密。

哈希算法是将一个不定长度的数据映射成一个固定长度的数据,结果即为哈希码。根据哈希码无法求得原值。

相同对象的哈希码一定相同,不同对象的哈希码也可能相同。

实际上,哈希码不是完全无法取得原值,有人将常用文本映射成哈希码做成一张表,通过查询哈希码,能够得到一组原值。但是无法准确求得,也保证原值一定在这组数据之中。

Java的Object对象的哈希码是通过地址相关来求得的。

(5)获取Class对象

public final native Class> getClass();

Class类对象是在类加载的时候由虚拟机创建的,唯一。

Student student = new Student();

student.setName("张三");

Student student1 = new Student();

System.out.println(student1.getClass() == student.getClass());

结果为true

(6)toString

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

输出对象的Class类名和哈希码的十六进制字符串。

(7)wait

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);

}

wait:让当前线程进入等待状态(挂起),同时释放当前线程持有的锁。直到其它线程调用此对象的notify或notifyAll方法,该线程被唤醒进入就绪状态。

wait():立即挂起

wait(long timeout):单位毫秒

wait(long timeout, int nanos):毫秒,纳秒

(8)notify、notifyAll

public final native void notify();

public final native void notifyAll();

唤醒

唤醒所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值