`

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 { }

}

分享到:
评论

相关推荐

    关于java中的native方法

    Java中的Native方法是Java语言与本地(Native)代码交互的一种机制,主要涉及到Java的JNI(Java Native Interface)技术。JNI允许Java程序调用C、C++等非Java编写的代码,反之亦然,使得Java可以充分利用本地平台的...

    java的native关键字学习

    4. **Java到本地的调用**:Java代码通过`native`关键字声明的方法可以调用本地代码,这在需要高性能计算、操作系统API调用或者访问硬件设备时特别有用。 5. **本地到Java的调用**:除了Java调用本地代码,本地代码...

    eSDK TP V100R005C01 代码样例 01(服务端Native, JAVA)

    然后,他们可以参考提供的代码样例,了解如何创建Java对象,调用Native方法,并处理异步或同步的调用结果。此外,开发者还应熟悉JNI的使用,因为这是Java和Native代码之间通信的关键桥梁。 总之,"eSDK TP V100R005...

    JAVA核心技术卷I源代码(第七版)

    《JAVA核心技术卷I源代码(第七版)》涵盖了Java编程语言的基础和核心概念,是学习和深入理解Java的宝贵资源。这份源代码包含了书中讲解的所有示例和练习,旨在帮助读者通过实践加深对理论知识的理解。 Java是面向...

    Java Native Interface Programmers Guide and Specification(Exp)

    - **头文件(.h)**:定义了本地方法的函数原型,供Java代码通过JNI头文件生成器生成对应的Java Native Method接口。 - **本地代码文件(.c或.cpp)**:实现了头文件中定义的本地方法,可以是C或C++代码。 - **...

    手势识别库:android端通过ndk打包成so库,java通过jni调用native识别方法

    在Java代码中,我们创建一个Java类,声明 native 方法,并使用 `System.loadLibrary` 加载对应的SO库。在C/C++代码中,我们使用JNI头文件定义的函数来实现这些native方法,处理手势识别的逻辑。 在实际开发中,会有...

    JAVA核心知识点整理.pdf

    3. 本地方法区:用于存储JNI(Java Native Interface)调用的本地方法的栈。 4. 堆:所有线程共享的内存区域,主要用于对象实例和数组的分配。新生代和老年代是堆的主要组成部分。 5. 方法区(在某些版本的JVM中也...

    Java Native Interface

    JNI的核心是提供了一套接口,使得Java代码可以调用本地(Native)代码,同时也允许本地代码调用Java方法。在JNI的帮助下,开发者可以编写C/C++代码来增强Java应用程序的功能,尤其是在处理系统级任务和高性能计算时...

    Java中的四个核心技术思想Java中的四个核心技术思想

    理解并熟练掌握这四个核心技术思想,不仅能够帮助开发者编写高效、可维护的Java代码,还能深入理解Java平台的工作原理,从而在解决问题时更加得心应手。在实际开发中,结合这些核心概念,可以实现更高级的技术应用,...

    The Java Native Interface Programmer's Guide and Specification

    Java Native Interface(JNI)是Java平台的一个核心组件,它允许Java应用程序调用其他编程语言编写的函数,或者让本地代码调用Java方法,从而实现了跨语言的无缝集成。 JNI在Java应用程序中的应用广泛,特别是在...

    JNA Java Native Access

    Java Native Access(JNA)是Java平台上的一个开源框架,它允许Java代码直接调用操作系统原生函数,而无需编写传统的Java本地接口(JNI)代码。JNA提供了一种更简单、更直观的方式来与C库和其他本地代码进行交互,极...

    java核心编程第十版示例代码

    《Java核心编程》是Java开发领域的一本经典...以上知识点只是《Java核心编程》可能覆盖的部分内容,实际示例代码中还会包含更多实用技巧和最佳实践。通过学习这些示例,开发者可以加深对Java语言的理解,提升编程能力。

    Java本地接口(JNI)编程指南和规范 Java Native Interface 6.0 Specification

    Java本地接口(JNI)是Java平台的一个核心特性,它允许Java代码和其他语言编写的代码进行交互,特别是C和C++。JNI在Java的发展历程中扮演了重要的角色,它为Java应用程序提供了与本地操作系统和硬件直接通信的能力,...

    JAVA面试核心知识点整理(283页).pdf

    * 继承(Inheritance):Java通过继承来实现代码的重用,子类可以继承父类的成员变量和方法。 * 多态(Polymorphism):Java通过方法的重写和重载来实现多态,方法的调用结果取决于对象的实际类型。 本文档提供了一...

    JAVA核心知识点整理学习.pdf

    JAVA核心知识点整理学习 Java是一种广泛使用的高级编程语言,它的核心知识点涵盖了Java编程语言的基础知识、Java虚拟机(JVM)的工作机制、Java的内存管理机制等方面。下面是对Java核心知识点的整理和学习。 目录 ...

    Java核心技术(卷一+卷二全集)

    《Java核心技术》是Java开发者的重要参考资料,分为卷一和卷二,全面涵盖了Java语言的基础与高级特性。卷一主要讲解了Java编程的基础知识,而卷二则深入探讨了更为复杂和高级的技术。以下是对这两卷内容的详细阐述。...

    Java转C++代码工具 J2C

    J2C工具的核心功能在于它能解析Java源代码,理解和转换其中的语法结构、类、对象、接口、方法等,将其转换为相应的C++语法。这涉及到对两种语言的语法规则、类型系统、异常处理、内存管理等方面的深刻理解。例如,...

Global site tag (gtag.js) - Google Analytics