在这篇文章中,我们将看到 Java 中原生方法的详细解释。我们将看到它的基本语法及其工作原理。将会有 Java 代码示例展示本机方法的使用。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
以下是 Java 中如何使用本机方法的基本语法:
[ public / protected / private] native [return-type] methodName ();
上面的语法显示了如何在 Java 中声明本地方法。与常规方法类似,它需要定义访问修饰符,后跟 native 关键字,然后是方法的返回类型,最后是指定了任何必要输入参数的方法名称。
我们可以将其定义为用Java以外的语言实现的方法,例如C/C++。使用此类方法背后的总体思想可能是利用 C/C++ 中可用的高性能或内存管理。
为了支持用其他语言编写的方法,Java 提供了一个称为 Java Native Interface 的接口,它充当 Java 和其他语言之间的中介。使用 JNI 的动机来自于它提供代码可重用性和高性能的能力。请注意,用 C/C++ 等其他语言编写的代码不可移植。
以下是Java原生接口的主要组件:
现在我们将看到一个示例,它可以清楚地理解 Java 中的原生方法是如何工作的。以下是使用本机方法所涉及的步骤:
下面的例子将分为两部分:java代码和native代码。
这是包含本机方法的 Java 类。
代码:
package com.edubca.nativedemo; class NativeDemo { public native String encryptData (String inputdata); static { System.loadLibrary ("nativedemo"); /* lowercase of classname! */ } public static void main (String[] args) { NativeDemo demo = new NativeDemo (); System.out.println("Encrypted data is " + demo.encryptData ("This is Edubca")); } }
上面的示例包含在 NativeDemo 类中声明的本地方法。我们已经用 C 语言编写了 encryptData 方法的实现。如您所见,我们使用了一个静态块,其目的是加载可实现 encryptData 方法的本机 C 库。一个重要的注意事项是,您应该提供封闭 Java 类的小写名称作为 System.loadLibrary 方法中的字符串参数。按照上面声明的步骤,是时候编译我们的 java 代码了。
以下命令编译上述java代码。
在下一步中,我们将使用 javah 实用程序创建一个头文件,如下所述。
上面的命令会生成一个与类名同名的javah文件。在编写本机方法的 C 实现时,应该包含此文件。
这是本机函数 encryptData 的 C 实现。
代码:
#include <jni.h> #include <stdio.h> #include "NativeDemo.h" JNIEXPORT void JNICALL Java_NativeDemo_encryptData(JNIEnv *env, jobject obj, jstring inputstr) { const char *str= (*env)->GetStringUTFChars(env,inputstr,0) // create string from jstring char Newch = '@'; for(i = 0; i <= strlen(str); i++) { if(str[i] == 'a' || str[i]== 'e' || str[i]== 'i' || str[i]== 'o' || str[i]== 'u' || str[i] == 'A' || str[i]== 'E' || str[i]== 'I' || str[i]== 'O' || str[i]== 'U') { str[i] = Newch; } } return env->NewStringUTF(str); // convert string to jstring }
如果一切顺利,您将看到以下输出:
通过上面的文章,我们已经有了清晰的认识。大多数用 Java 编写的实时应用程序都利用本机方法来获得 C/C++ 等本机编程语言中提供的性能和内存管理优势。
以上是Java 中的本机方法的详细内容。更多信息请关注PHP中文网其他相关文章!