Java核心代码(四)native方法

native方法的方法体不需在java文件中实现 而在cpp文件中实现 

可以将native方法比作Java程序同C程序的接口,其实现步骤: 

  1、在Java中声明native()方法,然后编译; 

  2、用javah产生一个.h文件; 

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件); 

  4、将第三步的.cpp文件编译成动态链接库文件; 

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节

java应用需要与java外面的环境交互。这是本地方法存在的主要原因,如 与操作系统交互: 

           JVM支持着java语言本身和运行时库,它是java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。

           然而不管怎 样,它毕竟不是一个完整的系统,它经常依赖于一些底层(underneath在下面的)系统的支持。

           这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的,

           还有,如果我们要使用一些java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。

public class Object {

        private static native void registerNatives();//告诉JVM有native方法

        static {

                registerNatives();

        }

        public final native Class<?> getClass();        

        protected native Object clone() throws CloneNotSupportedException;

        /**虽然Class也是extendsObject但不会死循环调

        因为public String getName() {if (name == null)name = getName0();return name;}

        private native String getName0();也是native的

        */

        public String toString() {

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

        }

        //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

        protected void finalize() throws Throwable { }

}

猜你喜欢

转载自luckywnj.iteye.com/blog/1722402