Object中的方法及应用,会有许多不完整的阐述,还希望各位多多点评。谢谢!



private static native void registNatives();

百度了半天也只是一个关于底层的方法,不是我所能触及。大致是将wait、notify、notifyAll、clone、hashCode本地方法进行注册(初始化Java方法到C的方法)。有多类都有这个方法,但是执行注册的目标是不同的。System中也有这个方法,但是它注册的是另一些方法。


public final native Class<?> getClass();

getClass()是一个本地方法,返回一个对象的类型。


public native int hashCode();

hashCode()返回一个散列值(哈希值),通过散列值找到哈希桶(bucket)中存储Entry对象的位置。


public boolean equals(Object obj);

equals()是Object类的方法,用于比较对象是否相等,没有重写的情况下,默认比较两个对象的相等。如果一个类重写了

equals()方法,那么根据具体需求判断两个对象是否相等的条件,在equals()中,不止可以判断属性相等,还可以在属性相等或不相等的情况下做出业务扩展。

重写equals()时有必要重写hashCode,以便维护hashCode的契约:

当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true 
当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false

public native Object clone () throws CloneNotSupportedException;

clone是实现对象的复制,而这个副本对象应当尽可能独立。就是在堆中的地址不同。为了实现这样的目的,在spuer.

clone返回对象之前,需要修改对象的一个字段或者多个字段(就是对象中的其他类型引用所引用的对象应该一起被复制)。这就是深度拷贝。浅度拷贝就是拷贝原始字段和不可变对象。


public String toString();

toString()经常重写,返回字符串对象,用于打印成员变量的信息。


publicnative final wait() throws InterruptedException;

public native final wait(long timeout) throws InterruptedException;

public native final wait( long timeout, int nanos) throws InterruptedException;

public native final void notify();

public native final void notifyAll()

以上五个方法是实现对象中线程同步机制。通过对象锁或者类锁操作(也就是需要在sychronized同步代码块中使用),实现多线程并发执行时在共享数据集上的互斥与协作。

当执行到wait(),将线程改为睡眠状态,当调用了notify或者notifyAll,才会唤醒线程,继续执行。

wait()是将当前同步代码块的对象锁锁释放,暂时交给其他线程使用,wait等待,就是等待拿回类中其他同步代码块中的对象锁。wait()有两个重载方法:

wait(long timeout):lang类型参数,申明最长的等待时间(以毫秒为单位),时间一到将收回对象锁

wait(long timeout,int nanos)有一个long类型参数,和int参数,long类型参数申明最长的等待时间(以毫秒为单位),int类型声明额外等待时间以纳秒为单位在0-99万之间。

notify和notifyAll没有什么区别,notify()是唤醒当前对象监听器上等待的一个线程。notifyAll()是唤醒当前对象监听器上等待的所有线程。


protected void finalize () throwable;

当垃圾回收器要回收垃圾对象时会调用此方法,实现资源释放。子类可以重写此方法,让程序运行时按照定义去实现对象回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值