关于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等等,不多做介绍。

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



评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理