微信搜一搜: 全栈小刘,获取文章全套 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等等,不多做介绍。
你只管学习,我来负责记笔记???? 关注公众号! ,更多笔记,等你来拿,谢谢