java 的 native 方法

一、概念

        一个 Native Method 就是一个 java 调用非 java 代码的接口,一个 Native Method 是这样一个 Java 方法:该方法的实现由非 java 语言实现,有可能是 C 语言实现的。

        在定义一个 native method 时,并不提供实现体,因为其实现体是由非 Java 语言在外面实现的可以打开 Object 这个类看看源码,这些函数的实现体在 DLL 中。

        标识符 native 可以与所有其他的 java 标识符连用,但是 abstract 除外,这是合理的,因为 native 暗示这些方法是有方法体的,只不过这些是非 java 的,但是 abstract 却显然的指明这些方法无实现体。

        一个 native method 方法可以返回任何 java 类型,包括非基本类型,而且也可以进行异常控制这些方法的实现体可以自制一个异常并且将其抛出,这一点与 java 的方法非常相似。

        native method 的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM 将控制调用本地方法的所有细节。

        如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用 java 语言重写这个方法(这个似乎看起来有些奇怪),同样的如果一个本地方法被 fianl 标识,它被继承后不能被重写。

二、总结

        本地方法非常有用,因为它有效地扩充了 jvm。事实上,我们所写的 java 代码已经用到了本地方法,在 sun java 的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得 java 程序能够超越 java 运行时的界限。有了本地方法,java 程序可以做任何应用层次的任务。

三、使用方法

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

        JNI Java 本机接口(Java Native Interface),是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit,SDK)的一部分。

        JNI 允许 Java 代码使用以其他语言编写的代码和代码库,Invocation APIJNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中从而允许程序员从本机代码内部调用 Java 代码。

        如果需要实现本地调用,需要考虑几个准则:

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

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

四、JNI 书写步骤

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

        b、使用 javac 命令编译编写的 Java

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

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

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

public class JniTest {

	public native void add(int i);
	static native public long Native2() ;
	private native synchronized float Native3( Object o ) ;
	native void Native4( int[] ary ) throws Exception ;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的小三菊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值