转载自
http://karoii.bokee.com/5869823.html
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本地方法适用的情况
1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
首先写好JAVA文件
/*
* Created on 2005-12-19 Author shaoqi
*/
package com.hode.hodeframework.modelupdate;
public class CheckFile
{
public native void displayHelloWorld();
static
{
System.loadLibrary("test");
}
public static void main(String[] args) {
new CheckFile().displayHelloWorld();
}
}
然后根据写好的文件编译成CLASS文件
然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile,
就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件
然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件
#include "CheckFile.h"
#include
#include
JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致
vc的编译方法:cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
最后在运行时加参数-Djava.library.path=[dll存放的路径]
分享到:
相关推荐
Java的`native`关键字在Java编程中扮演着特殊的角色,它是Java语言与底层操作系统交互的重要桥梁。本资源包是针对Java中的`native`关键字的学习资料,对于想要深入了解Java本地接口(JNI,Java Native Interface)的...
Java中的`native`关键字是用来声明一个方法为原生方法,这意味着该方法的实现不在Java代码中,而是由非Java语言(如C或C++)在本地代码中提供。原生方法是Java与操作系统或其他底层系统资源进行直接交互的重要手段,...
初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。 一、认识 native 即 JNI,Java...
在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...
在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...
这个关键字表明方法的实现是用非 Java 语言(通常是 C/C++)编写的,通常与Java Native Interface (JNI)一起使用。 8. **new**:创建。new 关键字用于动态分配内存并创建类的实例,也就是对象。 以上就是 Java ...
Java中的`native`关键字用于标记一个方法,表明该方法的实现并不在Java代码中,而是由其他语言(通常是C或C++)在本地代码(Native Code)中实现。这种特性使得Java能够与操作系统底层或者其他非Java语言编写的库...
### Java基础关键字详细介绍 #### 一、数据类型关键字 数据类型关键字用于定义变量的数据类型,是Java编程的基础。 ##### 1. 基本数据类型 - **boolean**:布尔类型,表示逻辑值,只能取两个值:`true` 和 `false...
### Java关键字分类解释 #### 一、类与接口定义关键字 - **class**: 在Java中,`class`关键字用于声明一个类。...以上是Java关键字的主要分类及其简要介绍。熟练掌握这些关键字对于编写高质量的Java程序至关重要。
`native`表示方法的实现是在其他地方(如C/C++)完成的,通常与Java的JNI(Java Native Interface)一起使用。 最后,`package`关键字用于组织类和接口,提供命名空间,防止命名冲突。`import`则用于引入其他包中的...
本文将详细介绍Java中的50个常用关键字,并按照其功能类别进行分类。 #### 数据类型相关关键字 (10个) 1. **byte**: 表示8位带符号的整数类型。 2. **short**: 表示16位带符号的整数类型。 3. **int**: 表示32位带...
本文将详细介绍Java中的一些核心关键字,并提供相应的解释和示例。 #### 关键字列表 根据给定的部分内容,我们可以列出以下Java关键字: 1. **abstract** 2. **continue** 3. **for** 4. **new** 5. **switch** 6...
- `native` 关键字用于声明方法是用C/C++实现的,Java本身不提供实现。 28. `new`: - `new` 用于创建对象,分配内存并调用构造方法初始化。 29. `null`: - `null` 是一个特殊的值,表示对象引用没有指向任何...
以上只是 Java 关键字中的一部分,还有许多其他关键字,如 `do`, `else`, `extends`, `final`, `finally`, `float`, `for`, `if`, `implements`, `import`, `instanceof`, `int`, `interface`, `long`, `native`, `...
Java 共有 50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`...
下面将详细介绍这些关键字及其用途。 1. **abstract** - 用于声明抽象类或抽象方法,不能实例化抽象类,只能作为其他类的父类。 2. **assert** - 用于单元测试,断言某个条件是否为真。 3. **boolean** - 数据...
本文将详细介绍Java中的关键字及其用途。 #### 关键字列表与解释 1. **abstract** - **用途**:用于声明抽象类和抽象方法。抽象类不能实例化,只能作为其他类的父类。抽象方法是没有实现的方法,必须在子类中提供...
Java语言关键字分类详解 Java语言关键字是Java编程语言的基本组成部分,它们是Java语言的核心结构单元。本文将对Java语言关键字进行分类详解,帮助读者深入理解Java语言的基础知识。 访问控制关键字 * private:...
以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...
Java关键字是编程的基础,它们是Java语言预定义的、具有特殊含义的标识符,不能作为变量名、方法名或类名。以下是对50个Java关键字的详细解释: 1. **abstract**:用于声明抽象类或抽象方法,不包含具体实现。 2. ...