微信搜一搜: 全栈小刘,获取文章全套 pdf 版
第 6 章 本地办法接口
1、本地办法
什么是本地办法?
- 简略地讲, 一个 Native Method 是一个 Java 调用非 Java 代码的接囗
- 一个 Native Method 是这样一个 Java 办法:该办法的实现由非 Java 语言实现,比方 C。
- 这个特色并非 Java 所特有,很多其它的编程语言都有这一机制,比方在 C ++ 中,你能够用 extern 告知 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++ 程序。
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 环境的交互
- 有时 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 等等,不多做介绍。
你只管学习,我来负责记笔记???? 关注公众号!, 更多笔记,等你来拿,谢谢