乐趣区

关于java:第-6-章-本地方法接口详解

微信搜一搜: 全栈小刘,获取文章全套 pdf 版

第 6 章 本地办法接口

1、本地办法

什么是本地办法?

  1. 简略地讲, 一个 Native Method 是一个 Java 调用非 Java 代码的接囗
  2. 一个 Native Method 是这样一个 Java 办法:该办法的实现由非 Java 语言实现,比方 C。
  3. 这个特色并非 Java 所特有,很多其它的编程语言都有这一机制,比方在 C ++ 中,你能够用 extern 告知 C ++ 编译器去调用一个 C 的函数。
  4. “A native method is a Java method whose implementation is provided by non-java code.”(本地办法是一个非 Java 的办法,它的具体实现是非 Java 代码的实现)
  5. 在定义一个 native method 时, 并不提供实现体 (有些像定义一个 Java interface),因为其实现体是由非 java 语言在里面实现的。
  6. 本地接口的作用是交融不同的编程语言为 Java 所用,它的初衷是交融 C /C++ 程序。

native 办法举例

Object 类的 getClass() 办法

public final native Class<?> getClass();

Thread 类的 start() 办法

    public synchronized void start() {if (threadStatus != 0)
            throw new IllegalThreadStateException();

        group.add(this);

        boolean started = false;
        try {start0();
            started = true;
        } finally {
            try {if (!started) {group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {}}
    }

    private native void start0();
  • 代码举例说明 Native 办法如何编写
  • 须要留神的是:标识符 native 能够与其它 java 标识符连用,然而 abstract 除外
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 Method?

Java 应用起来十分不便,然而有些档次的工作用 Java 实现起来不容易,或者咱们对程序的效率很在意时,问题就来了。

与 Java 环境的交互

  1. 有时 Java 利用须要与 Java 里面的硬件环境交互,这是本地办法存在的次要起因。你能够想想 Java 须要与一些 底层零碎 ,如操作系统或某些硬件替换信息时的状况。
  2. 本地办法正是这样一种交换机制:它为咱们提供了一个十分简洁的接口,而且咱们无需去理解 Java 利用之外的繁琐的细节。

与操作系统的交互

  1. JVM 反对着 Java 语言自身和运行时库,它是 Java 程序赖以生存的平台,它由一个解释器(解释字节码)和一些连贯到本地代码的库组成。
  2. 然而不管怎样,它毕竟不是一个残缺的零碎,它常常依赖于一底层零碎的反对。这些底层零碎经常是弱小的操作系统。
  3. 通过应用本地办法,咱们得以用 Java 实现了 jre 的与底层零碎的交互,甚至 JVM 的一些局部就是用 C 写的。
  4. 还有,如果咱们要应用一些 Java 语言自身没有提供封装的操作系统的个性时,咱们也须要应用本地办法。

Sun’s Java

  1. Sun 的解释器是用 C 实现的,这使得它能像一些一般的 C 一样与内部交互。jre 大部分是用 Java 实现的,它也通过一些本地办法与外界交互。
  2. 例如:类 java.lang.Thread 的 setPriority() 办法是用 Java 实现的,然而它实现调用的是该类里的本地办法 setPriority0()。这个本地办法是用 C 实现的,并被植入 JVM 外部在 Windows 95 的平台上,这个本地办法最终将调用 Win32 setpriority() API。
  3. 这是一个本地办法的具体实现由 JVM 间接提供,更多的状况是本地办法由内部的动态链接库(external dynamic link library)提供,而后被 JVM 调用。

本地办法的现状

目前该办法应用的越来越少了,除非是与硬件无关的利用,比方通过 Java 程序驱动打印机或者 Java 系统管理生产设施,在企业级利用中曾经比拟少见。因为当初的异构畛域间的通信很发达,比方能够应用 Socket 通信,也能够应用 Web Service 等等,不多做介绍。

你只管学习,我来负责记笔记???? 关注公众号!, 更多笔记,等你来拿,谢谢



退出移动版