转载

浅谈Java Object类

今天有空来总结一下Java.lang包中的Object类,如有不当请多指教!

Object类是Java中其他所有类的父类。

Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。

Object类没有定义属性,一共有12个方法,具体如下:

registerNatives()
clone()
getClass()
hashCode()
equals(Object obj)
toString()
notify()
notifyAll()
wait()
wait(long timeout)
wait(long timeout, int nanos)
finalize()

接下来我们来对这些方法逐个介绍。

registerNatives

private static native void registerNatives();
    static {
        registerNatives();
    }

registerNatives函数前面有 native 关键字修饰,Java中, 用native关键字修饰的函数表明该方法的实现并不是在Java中去完成, 而是由C/C++去完成,并被编译成了.dll,由Java去调用。 方法的具体实现体在dll文件中,对于不同平台,其具体实现应该有所不同。

clone

protected native Object clone() throws CloneNotSupportedException;

clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

clone和copy的区别:

假设现在有一个Person对象,Person person1 =new Person("czy",18);通常会有这样的复制

Person person2=person1,这个时候只是简单了copy了一下reference,person1和person2都指向内存中同一个object,这样person1或者person2的一个操作都可能影响到对方。显然这不是我们愿意看到的。我们希望得到tobby的一个精确拷贝,同时两者互不影响,这时候我们就可以使用Clone来满足我们的需求。

Person person2=person1.clone(),这时会生成一个新的Person对象,并且和person1具有相同的属性值和方法。

参考

https://www.cnblogs.com/lwbqqyumidi/p/3693015.html

原文  https://segmentfault.com/a/1190000020787281
正文到此结束
Loading...