Native Method

来源:互联网 发布:招聘数据出售 编辑:程序博客网 时间:2024/05/21 16:54

在学习JVM的过程中,看到书中(《深入理解JAVA虚拟机》)讲到程序技术器时的一句话:如果正在执行的是Native 方法,这个技术器则为空(undefined)。本人只是个实习半年的小菜鸟。所以不造什么是本地方法委屈,就开始上网混迹各位大神的博客,看完之后有了这么点理解:

先贴上一些参考的链接,谢谢你们的分享:http://blog.csdn.net/wike163/article/details/6635321

                                                       http://blog.sina.com.cn/s/blog_5b9b4abe01016zw0.html

Native 方法: 用native关键词修饰(表示没用过...);

         本地方法保存在动态链接库中(我又不造什么是动态链接库了,好忧桑),格式是各个平台专有的;

 非java语言编写,所以就不再有JAVA的与平台无关的优点,它与平台相关,这样程序失去了可移植性,反正就是能不用就不用,没办法了再用它。类似坐个公交车有硬币有公交卡时就用硬币公交卡,没这些时你一定要上这公交的话,就算毛爷爷,你也得投进去。

定义Native Method : 定义本地方法时不提供实现体,跟接口意思差不多,它的实现是非java语言在外面实现的:

public class Wt_Native{

   native public void wt_cool(Object obj);

   native static public boolean wt_perfect();

   ......

}

你一定看明白了,看不明白,是我表达有问题,但你不会狠心到让我回去重新读小学语文吧... 

native标示符可以于除了abstract的其他标示符连用,现在直接copy一句第一个链接中的一句话:有一点要牢牢记住:我们可以在一个native method的本地实现中访问所有的java特性,但是这要依赖于你所访问的java特性的实现,而且这样做远远不如在java语言中使用那些特性方便和容易。   //我对这句话的理解大概就是你要问妈妈拿钱买东西,还得先看妈妈的心情,远远不如自己赚工资来的方便。

      native 的作用:与JAVA外的环境接触;

  我们可以不用考虑外部是怎么实现的,只需用调用就好;

  虽然它会使程序失去可移植性,但是当某一些功能JAVA实现起来并不是很方便,或者当我们需要考虑效率和优化时,本地方法的用处就在这。

    

     Native Method 在JVM中的运行:

当一个类被调用时,这个类会被加载到内存当中。在这个被加载类的字节码入口有着一个该类方法描述符的list。这些方法描述符包含这样一些信息:方法代码存于何处,它有哪些参数,方法的描述符(public之类)等等。

如果在某个方法描述符中有native存在,那么这个描述符块将有一个指向该方法实现方法的指针,这些实现在一些.dll文件中,但是它们会被操作系统加载到JAVA程序的地址空间。

当一个带有native描述符的类被加载时,其相关的.dll文件不会被加载,所以指向该方法的指针不会被设置。

当这个本地方法被调用的时候,在调用之前,这些.dll文件才会被加载。这些是通过java.system.loadLibrary()实现的。

0 0
原创粉丝点击