什么是native输出

什么是native输出,第1张

JAVA中的native是什么?

native主要用于方法

1、一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现。

2、在定义一个native方法时,并不提供实现体(比较像定义一个Java Interface),因为其实现体是由非Java语言在外面实现的。

native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对 *** 作系统底层进行访问和 *** 作,但是可以通过JNI接口调用其他语言来实现对底层的访问。

JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。

不过,对Java外部的调用通常不能移植到其他平台,在applet中还可能引发安全异常。实现本地代码将使您的Java应用程序无法通过100%纯Java测试。但是,如果必须执行本地调用,则要考虑几个准则:

1.将您的所有本地方法都封装到一个类中,这个类调用单个的DLL。对每一种目标 *** 作系统平台,都可以用特定于适当平台的版本的DLL。这样可以将本地代码的影响减少到最小,并有助于将以后所需要的移植问题考虑在内。

2.本地方法尽量简单。尽量使您的本地方法对第三方(包括Microsoft)运行时DLL的依赖减少到最小。使您的本地方法尽量独立,以将加载您的DLL和应用程序所需的开销减少到最小。如果需要运行时DLL,必须随应用程序一起提供。

JNI的书写步骤如下:

a.编写带有native声明的方法的Java类

b.使用javac命令编译编写的Java类

c.使用java -jni ****来生成后缀名为.h的头文件

d.使用其他语言(C、C++)实现本地方法

e.将本地方法编写的文件生成动态链接库

以下是一个在Java中调用本地C程序的简单的例子:

a.编写HelloWorld.java类

class HelloWorld {

public native void hello()

static {

System.loadLibrary("hello")

}

public static void main(String[] args) {

new HelloWorld().hello()

}

}

b.编译

javac HelloWorld.java

c.生成.h文件

javah -jni HelloWorld

生成内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */ #

include <jni.h>

/* Header for class HelloWorld */

#ifndef _Included_HelloWorld

#define _Included_HelloWorld

#ifdef __cplusplus

extern "C" {#

endif

/*

* Class: HelloWorld

* Method: hello

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv * , jobject)#

ifdef __cplusplus

}#

endif# endif

第一个参数是调用JNI方法时使用的JNI Environment指针。第二个参数是指向在此Java代码中实例化的Java对象HelloWorld的一个句柄。其他参数是方法本身的参数

d.c实现

#include <jni.h >

#include "HelloWorld.h"

#include <stdio.h >

JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv * env, jobject obj) {

printf("Hello World!\n")

return

}

其中,第一行是将jni.h文件引入(在%JAVA_HOME%\include目录下),里边有JNIEnv和jobject的定义。

e.编译c实现

这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。

cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll

注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include -I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。

6) 运行程序

java HelloWorld 就ok了!

文章知识点与官方知识档案匹配

Java技能树首页概览

91537 人正在系统学习中

打开CSDN APP,看更多技术内容

Java当中native方法的详解_先苦后甜似淡非定的博客_native方法...

一、认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互 *** 作的API,称为Java Native Interface (Java本地接口)。 回到顶部 二...

继续访问

JAVA中的native是什么有什么用_Rsun04551的博客_java中native...

1、一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现 2、在定义一个native方法时,并不提供实现体(比较像定义一个Java Interface),因为其实现体是由非Java语言在外面...

继续访问

【基础】Java的native方法作用和意义

Java的native方法作用和意义

继续访问

最新发布 Java关键字之native详解

native 用来修饰方法,用 native 声明的方法表示告知 JVM 调用,该方法在外部定义,我们可以用任何语言去实现它。简单地讲,一个native Method就是一个 Java 调用非 Java 代码的接口。

继续访问

java之native关键字详细解析_码农研究僧的博客

publicnativeStringintern()1 1. 概念 深究其native这个关键字 其主要表现为 只要有一个native方法,内部结构是Java调用非Java代码接口 所谓的非java代码,主要是指c或者c++实现,可以不深究其代码实现,只需要会调用即可 ...

继续访问

java中的Native方法_消逝者的博客_java native方法

一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在...

继续访问

Java中的native方法

原文链接:java中的native方法 Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到 *** 作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。 可以将native方法比作Java程序同C程序的接口,其实现步骤: 1、在Java中声明native()方法,然后编译。 2、用javah产生一个

继续访问

JNI使用及简单封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Java调用C++二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 本文主要记录JNI实践中的使用场景,Java调用C++ ,C++回调Java的实现过程,带简单封装思路。 提示:以下是本篇文章正文内容,下面案例可供参考 一、Java调用C++ ##1, 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示.

继续访问

java中native方法实现_详解Java中native方法的使用_勤婧知浩的博客-C...

今天在网上学习时碰到有关于native修饰符所修饰的方法,上网查了查,觉得很有意思记录一下 1、native简介 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言...

继续访问

java native方法_深入理解Java虚拟机_weixin_39557087的博客-CSDN...

native方法就是非Java的方法,比如可能是C 实现的,在字节码文件中并不会体现,所以native方法的计数器值是空的。比如System.currentTimeMillis()方法就是一个native方法,声明如下: publicstaticnativelongcurrentTimeMillis()...

继续访问

java的native_Java关键字(二)——native

本篇博客我们将介绍Java中的一个关键字——native。native 关键字在 JDK 源码中很多类中都有,在 Object.java类中,其 getClass() 方法、hashCode()方法、clone() 方法等等都是用 native 关键字修饰的。public final native Class>getClass()public native int hashCode()...

继续访问

Java native方法详解

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

继续访问

java中的native是什么

native主要用于方法上 一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现。

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到 *** 作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。

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

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

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

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

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

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

JAVA的native方法适用的情况:

1、为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问。

2、为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的。

3、为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

应该在才c:/windows/system32文件夹 或者如果你在DDK的"Checked Build"环境下进行编译,将会在%BASEDIR%\lib\%CPU%\Checked(例如c:\ddk\lib\i386\checked\native.exe)产生一个包含了全部调试信息的native应用程序。如果你在"Free Build"环境中编译,你会在%BASEDIR%\lib\%CPU%\Free得到一个释出版本的程序.这些和构造设备驱动程序放置的位置是一样的。 Native应用程序有着".exe"的扩展名,但是你不能象 win32的.exe文件那样去运行它,如果你在WIN32环境下运行下,将会得到如下提示: "<应用程序名>应用程序无法在Win32模式中运行。"

采纳哦


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7841300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存