Object源码阅读
Object
在类层次结构中Object是所有类对对象的根类,并且Object是每个类的超类。
本地方法
registerNatives
1 | private static native void registerNatives(); |
当包含registerNatives()方法的类被加载的时候,注册的方法就是该类所包含的除了registerNatives()方法以外的所有本地方法。
一个Java程序想要调用一个本地方法需要执行两个步骤:
- 通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存
- 当Java程序需要调用本地方法时,虚拟机再在加载的动态文件中定位并链接该本地方法,从而执行本地方法。
registerNatives的作用就是取代第二个步骤,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。
使用registerNatives方法的三点好处:
- 通过registerNatives方法在类被加载的时候就主动将本地方法链接到调用方,比当方法被使用时再由虚拟机来定位和链接更方便有效;
- 如果本地方法在程序运行中更新了,可以通过调用registerNative方法进行更新;
- Java程序需要调用一个本地应用提供的方法时,因为虚拟机只会检索本地动态库,因而虚拟机是无法定位到本地方法实现的,这个时候就只能使用registerNatives方法进行主动链接。
clone
1 | protected native Object clone() throws CloneNotSupportedException; |
此方法用于拷贝对象,属于浅拷贝,调用时会创建一个新的对象,但是新的对象内的属性会使用旧的对象的属性进行填充并且旧的对象的属性如果是属性只有拷贝其内存引用
finalize
1 | protected void finalize() throws Throwable { } |
当GC确定要回收对象之前,会调用此方法(并且只会调用一次,也就是说此对象最多“复活”一次),子类覆写此方法时,需要调用基类的此方法,不然基类的finalize方法不会被执行,此方法不推荐使用, 可以使用finally代替此方法回收资源
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 gmfan!