Java中的Native关键字讲解

目录
  • 一、Java中Native关键字的语法
  • 二、Native关键字是如何工作的?
  • 三、代码示例
  • 四、Java中Native关键字的优势
  • 五、规则
  • 六、总结

前言:

native关键字充当JAVA语言与除JAVA之外的其他语言编写的代码块或库之间的链接,这可能取决于您操作的机器。如果将native关键字应用于一个方法,那么这意味着该方法将通过JNI(JAVA native interface)使用其他语言(如C或C++)编写的本机代码来实现。

一、Java中Native关键字的语法

本机代码的语法与普通函数定义相同,在函数开头添加了“native”关键字。

例如:

Public class testing
{public native String testMethod (String parameter);}

在这里,public是一个访问修饰符。它应该是公共的,以便其他文件可以使用它。字符串是函数的返回数据类型。它可以是整数、字符或布尔值,具体取决于关键字。传递给此函数的参数也是数据类型字符串。一切都应该保持在社会底层。

在函数声明之后,我们通过创建对象和加载库来调用这个函数。

public static void main(String[] args)
{
System.loadLibrary("testing");
testing testingnew = new testing();
String  output   = testingnew.stringMethod("NATIVE");
}

应首先加载上面定义的库,并创建对象。在这个对象的帮助下,本机函数被调用。

二、Native关键字是如何工作的?

应该有两个文件。一个包含JAVA代码,而另一个应该包含C/C++遗留代码。Java代码将用于调用遗留代码。此遗留代码将与硬件交互并返回预期输出。

当遗留代码与硬件交互时,它将不会遵循JAVA制定的准则。此代码将执行所需的处理,以获得输出并将结果传递给JNI。Java本机接口随后将检入其目录,其中包含与本机代码相关的所有规则(这在SDK中位于名为javah.exe的文件下)。JNI是作为Java工具包的一部分设计的。在此处理之后,JAVA将以JAVA语言本身发布输出。当我们创建JAVA程序时,我们必须确保JAVA文件和遗留文件之间有一个变量/数据流链接,以便两者之间有一个平滑的数据流。

下面给出了解释如何使用本机关键字的步骤:

  • 1. 编写包含本机方法、已加载的共享库的JAVA代码,并使用“filename.JAVA”保存它。
  • 2. 编译JAVA代码并将代码转换为字节码。
  • 3. 创建包含应调用的本机函数签名的C/C++头文件。
  • 4. 编写C/C++代码有一个本机方法的实现。
  • 5. 运行JAVA可执行文件以查看结果。

三、代码示例

我们在Eclipse中编写代码并运行代码来创建一个库,然后使用该库来实现C代码。

代码:

public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary("JPPlibs");
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}

在将此代码保存到java项目的新“类”中之后,我们必须设置一个运行环境来生成头文件。

当我们运行这个程序时,应该生成一个库。

输出:

这里我们从java代码创建了头文件,它将本地代码和java语言链接起来。

四、Java中Native关键字的优势

下面给出了一些优点:

  • 它为JAVA提供了一个额外的优势,可以与用其他语言编写的代码交互,并减少用JAVA编写相同代码的工作量,从而减少代码冗余。
  • 它提高了总体代码性能。由于代码是用其他语言编写的,因此使用机器语言时可能比使用JAVA更快。然后我们可以使用JAVA程序调用此代码。
  • 使用这种方法,我们可以直接进行系统调用。降低外部干扰的概率,提高代码执行速度。
  • 您可以使用用JAVA编写的任意驱动代码动态调用预加载的库(用JAVA以外的任何语言编写),仍然可以用JAVA获得响应。
  • 它使JAVA能够访问硬件资源,而这些硬件资源只能由其他语言使用。
  • 如果您已经为应用程序构建了一个依赖于平台的代码,并且其功能不受JAVA支持,那么我们可以使用本机代码,并通过native关键字将本机代码链接到JAVA。

五、规则

native关键字的规则如下所示:

native关键字将在方法名称之前使用。

  • native方法声明没有正文,应该以分号结尾,因为这些方法不是在JAVA中定义的,而是在C/C++语言中出现的。
  • native方法不能声明为抽象方法。
  • 由于无法保证以前的旧代码是否按照IEEE 754标准编写(IEEE浮点算法标准是1985年由电气和电子工程师协会制定的浮点算法技术标准),因此我们不能将这些原生方法声明为严格FTP。
  • JAVA设计JAVA本机native接口(JNI)规范来定义实现本机方法的规则和声明,如JAVA和native代码之间的数据类型转换。

六、总结

native关键字是架起本机语言和JAVA之间鸿沟的桥梁。如果我们的软件与硬件的交互在使用预先存在的代码时更有效,那么这可以作为一个关键环节。与从头开始设计新的应用程序代码相比,只要可以避免,它就可以使实现工作更少。

(0)

相关推荐

  • 全面了解Java中Native关键字的作用

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方.所以下面想要总结下native. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Ja

  • 详解Java中native关键字

    一. 什么是Native Method    简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C.这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数.    "A native method is a Java method whose implementatio

  • Java Native关键字原理及作用解析

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方.所以下面想要总结下native. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Ja

  • Java中的Native关键字讲解

    目录 一.Java中Native关键字的语法 二.Native关键字是如何工作的? 三.代码示例 四.Java中Native关键字的优势 五.规则 六.总结 前言: native关键字充当JAVA语言与除JAVA之外的其他语言编写的代码块或库之间的链接,这可能取决于您操作的机器.如果将native关键字应用于一个方法,那么这意味着该方法将通过JNI(JAVA native interface)使用其他语言(如C或C++)编写的本机代码来实现. 一.Java中Native关键字的语法 本机代码的语

  • Java中的Native方法

    目录 1.Native方法在Java中如何工作? 2.Java中Native方法的示例 3.总结 以下是java中如何使用native方法的基本语法: [ public / protected / private] native [return-type] methodName (); 上面的语法显示了如何在java中声明本机方法.与普通方法一样,它需要定义一个访问修饰符,后跟一个native关键字,后跟方法的返回类型,最后是方法名称,如果需要,还需要指定输入参数. 1.Native方法在Jav

  • 深入理解Java中的final关键字_动力节点Java学院整理

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

  • JAVA中的final关键字用法实例详解

    本文实例讲述了JAVA中的final关键字用法.分享给大家供大家参考,具体如下: 根据上下文环境,java的关键字final也存在着细微的区别,但通常指的是"这是无法改变的."不想改变的理由有两种:一种是效率,另一种是设计.由于两个原因相差很远,所以关键子final可能被误用. 接下来介绍一下使用到final的三中情况:数据,方法,类 final数据 许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的.有时数据的恒定不变是很有用的,例如: 1. 一个编译时恒定不变的常量 2.

  • Java中的final关键字详解及实例

    Java中的final关键字 1.修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修改. 上面的代码对age进行初始化后就不可再次赋值,否则编译时会报类似上图的错误. 如果修饰的是引用类型的变量,那么初始化后就不能让他指向另一个对象,如下图所示 2.修饰方法 用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的. 注:类的private方法会

  • Java中的final关键字深入理解

     java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,

  • 详解Java中使用externds关键字继承类的用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 class Animal{ void eat(){ System.out.println("Animal eat"); } void sleep(){ System.out.println("Animal sleep"); } void breathe(){ System.o

  • Java中的static关键字全面解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

  • redis在java中的使用(实例讲解)

    1.首先下载jar包放到你的工程中 2.练习 package com.jianyuan.redisTest; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; public class RedisTest { public static void main(String[] args) { //连接本地的Redis服务 Jedis je

  • Java中的instanceof关键字在Android中的用法实例详解

    在下面介绍Android中如何使用instanceof关键字开发更方便时,先来温习一下java中instanceof的概念. instanceof大部分的概念是这样定义的:instanceof是Java的一个二元操作符,和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据.举个栗子: String s = "I AM an Object!"; boolean isObj

随机推荐