黑马程序员技术交流社区

标题: native 关键字 [打印本页]

作者: 李江    时间: 2013-8-7 17:57
标题: native 关键字
本帖最后由 graspDN 于 2013-8-8 21:45 编辑
  1. public class Object {

  2.     private static native void registerNatives();
复制代码
在java源代码Object类中看到这样声明函数,请问native关键字在此处是什么意思?它有什么用途?
作者: 吴光新    时间: 2013-8-7 18:17
本帖最后由 Jiewin 于 2013-8-7 18:22 编辑

native是本地的。就是告诉编译器,这个函数不是java实现的,比如java无法直接操作系统硬件时,用native来扩展java的功能
作者: 李江    时间: 2013-8-7 18:35
Jiewin 发表于 2013-8-7 18:17
native是本地的。就是告诉编译器,这个函数不是java实现的,比如java无法直接操作系统硬件时,用native来扩 ...
  1. public class TestDemo {
  2.         public native void displayHelloWorld();

  3.         static {
  4.                 System.loadLibrary("hello");
  5.         }

  6.         public static void main(String[] args) {
  7.                 new TestDemo().displayHelloWorld();
  8.         }
  9. }
复制代码
如何让它运行起来啊?
作者: 吴光新    时间: 2013-8-7 18:42
graspDN 发表于 2013-8-7 18:35
如何让它运行起来啊?

这个关键字没有具体去理解过,你想知道怎么用,给你推荐一篇文章
http://www.apkbus.com/forum.php?mod=viewthread&tid=337
作者: 黑马龙子    时间: 2013-8-7 18:47
此句使用native关键字说明这个registerNatives()方法是原生函数,也就是这个registerNatives()方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。
这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。
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中被访问了。希望能帮助你理解!

作者: 丁永志    时间: 2013-8-7 18:49
在JAVA中 native关键字表示一个方法只可以调用,但是不能编写。
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于借口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
作者: 李江    时间: 2013-8-7 19:00
Jiewin 发表于 2013-8-7 18:42
这个关键字没有具体去理解过,你想知道怎么用,给你推荐一篇文章
http://www.apkbus.com/forum.php?mod=v ...

貌似懂了一点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2