ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第六章 - 本地方法接口

2022-08-16 09:04:27  阅读:180  来源: 互联网

标签:Java 接口 本地 第六章 group 方法 method native


 走选择的路,别只选好走的路

1.本地方法

  • 简单地讲,一个Native Method是一个Java调用非Java代码的接囗。

  • 一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。

  • 这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

  • “A native method is a Java method whose implementation is provided by non-java code.”(本地方法是一个Java的方法,它的具体实现是非Java代码的实现)

  • 在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。

  • 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序

2.native方法举例

Object类的getClass( )方法
public final native Class<?> getClass();
Thread类的start( )方法
public synchronized void start() {
       /**
        * This method is not invoked for the main method thread or "system"
        * group threads created/set up by the VM. Any new functionality added
        * to this method in the future may have to also be added to the VM.
        *
        * A zero status value corresponds to state "NEW".
        */
       if (threadStatus != 0)
           throw new IllegalThreadStateException();

       /* Notify the group that this thread is about to be started
        * so that it can be added to the group's list of threads
        * and the group's unstarted count can be decremented. */
       group.add(this);

       boolean started = false;
       try {
           start0();
           started = true;
      } finally {
           try {
               if (!started) {
                   group.threadStartFailed(this);
              }
          } catch (Throwable ignore) {
               /* do nothing. If start0 threw a Throwable then
                 it will be passed up the call stack */
          }
      }
  }

   private native void start0();
自定义Native方法
public class IHaveNatives {
   public native void Native1(int x);

   public native static long Native2();

   private native synchronized float Native3(Object o);

   native void Native4(int[] ary) throws Exception;
   
}

注意:标识符native可以与其他java标识符连用,但是不能与abstract连用。

3.为什么要使用Native Method

Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。

  • 与Java环境外交互

    • 有时Java应用需要与Java外面的环境交互这是本地方法存在的主要原因。你可以想想Java需要与一些底层系统,如操作系统或某些硬件交换信息时的情况。

    • 本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解Java应用之外的繁琐的细节。

  • 与操作系统的交互

    • JVM支持着Java语言本身和运行时库,它是Java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。

    • 然而不管怎样,它毕竟不是一个完整的系统,它经常依赖于一底层系统的支持。这些底层系统常常是强大的操作系统。

    • 通过使用本地方法,我们得以用Java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的

    • 还有,如果我们要使用一些Java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。

  • Sun’s Java

    • Sun的解释器是用C实现的,这使得它能像一些普通的C一样与外部交互。jre大部分是用Java实现的,它也通过一些本地方法与外界交互。

    • 例如:类java.lang.Thread的setPriority( )方法是用Java实现的,但是它实现调用的是该类里的本地方法setPriority0( )。这个本地方法是用C实现的,并被植入JVM内部在Windows 95的平台上,这个本地方法最终将调用Win32 setpriority( ) API。

    • 这是一个本地方法的具体实现由JVM直接提供,更多的情况是本地方法由外部的动态链接库(external dynamic link library)提供,然后被JVM调用。

本地方法的现状

目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机或者Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等等,不多做介绍。

 

标签:Java,接口,本地,第六章,group,方法,method,native
来源: https://www.cnblogs.com/l12138h/p/16586936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有