Java中的原生关键字

Java中的native关键字应用于方法,以指示该方法是在使用JNI(Java native Interface)的本机代码中实现的。native关键字是一个适用的修饰符 仅适用于方法 ,我们不能在其他任何地方应用它。在C、C++中实现的方法称为本机方法或异类方法。

null

本机修饰符表示方法是在依赖于平台的代码中实现的,这在C语言中很常见。原生修饰符表示方法是在依赖于平台的代码中实现的,通常是在C语言中。

本机关键字的主要目标

  • 以提高系统的性能。
  • 实现机器级/内存级通信。
  • 使用已有的遗留非java代码。

结论: java应用程序扫描调用代码是用C++、汇编语言编写的。

创建本机方法的步骤如下:

  1. 编写java代码
  2. 编译java代码。
  3. 创建C头(.h文件)
  4. 创建C存根文件(使用工具:Java HEdge)
  5. 编写C代码
  6. 创建共享代码库(DLL)
  7. 运行应用程序

实施: Java中的原生关键字

让我们首先随机获取包含本机方法的java代码,稍后我们将对其进行编译。我们完成了上述两个步骤。

对于步骤3和4,我们将使用现有的。exe称为java HEdge,用于创建C头文件和C存根文件。现在我们将编写我们的C代码(或使用),并在以后使用

现在圣

实例

JAVA

// Java Program to Illustrate Native Keyword
// Inside DLL named: NameOfDLLFile
// Main class
// NativeDemo
class GFG {
// Method 1
public static void main(String[] args)
{
int var;
// Here we will not be having body of this method
// in our java code here
NameOfDLLFile obj = new NameOfDLLFile();
obj.var = null ;
System.out.println( "Before native method: var = "
+ var);
obj.test();
System.out.println( "After native method: var = "
+ var);
}
// Native method
public native void test()
{
static
{
// We will be loading body from DLL file
// It has to be present in DLL file
System.loadLibrary( "NameOfDLLFile" );
// Above C code in loaded in the JVM
}
}
}


对于上述程序,DLL中共享的C代码如下:

C++

// C++ Program to Be Shared In DLL to Illustrate
// Native Method in Java
// Importing required libraries
#include <iostream>
using namespace std;
// Method 1
// Main driver method
int main()
{
test(10);
return ;
}
// Method 2
// Native
void test()
{
int var;
cout << var;
}


注: DLL被命名为可以从程序1A中看到的: 文件名

输出:

Before native method: var = nullAfter native method: var = 10

请记住,关于原生关键字,有以下几点很重要:

  • 对于本机方法,实现已经在C、C++等旧语言中可用,并且我们不负责提供实现。因此,本机方法声明应该以结束;(分号)。
  • 我们不能将本机方法声明为 摘要 .
  • 我们不能将本机方法声明为 严格的 因为不能保证旧语言(C,C++)遵循IEEE 754标准。因此,本机strictfp组合是方法的非法组合。
  • native关键字的主要优点是性能提高,但native关键字的主要缺点是它打破了java的平台无关性。

注: 请仔细阅读java的strictfp关键字,因为这是一个即使是非常优秀的java开发人员也不知道的概念。

在本节中,我们将解释如何在Java中声明本机方法,以及如何生成相应的C/C++函数原型。

语法: 声明本机方法

private native String getLine(String prompt);

语法: 从母语方面

javah -jni PromptJNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *, jobject, jstring);

本文由 比沙尔·库马尔·杜比 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享