一:什么是NATIVE Method

简单的讲,一个NATIVE Method就是调用了java调用非java代码实现的接口。

native method 方法实现:该方法的实现是由非java语言实现的,比如C。这个特征并非java特有,很多其他编程语言都有这一机制。比如C++中,你可以用extern "C"告知C++编译器去调用C的一个函数。

在定义一个native method时,并不需要实现体,因为他的实现体是由非java语言在外面实现的。

JDK中Object类中有很多方法都是,例如线程之间通信的notify/wait/notifyAll方法:

notify和notifyAll唤醒线程

二:NATIVE Method与正常java方法有区别吗

1.标识符native可以与所有其他java标识符一起用,但是abstract例外,因为abstract是没有实现体的,而native显然是有实现体的,虽然它的实现体是由非java语言编写的。native与java其他标识符连用的时候对非NATIVE METHOD没有区别。

2.一个native method 方法的返回结果可以是任何类型,包括非基本类型,同样也可以有异常处理机制。这些方法的实现体可以自制一个异常抛出,与java中异常处理没有区别。

3.一个类中有native method,当这个类被继承之后,子类也可以调用和用java重写这个方法.当然如果这个方法有标识符final则不可被继承,这个也与正常java方法一样。

三:NATIVE Method有啥用?

最重要一点就是,使用本地方法能够提高程序运行效率。

1.与java环境外交互:

有时java应用需要与java外的环境交互。这是本地方法存在的主要原因。当java与一些底层系统如操作系统或者某些硬件交互信息的时候。本地方法就是这样的一个交互机制,让我们无需了解java应用外的繁琐细节。

2.与操作系统交互:

JVM支持着java语言本身和运行时库,它是java语言运行赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。但毕竟不是一个完整的系统,需要依赖于底层系统的支持。这些底层系统通常就是强大的操作系统。通过使用本地方法,我们得以用java实现了jre与底层系统的交互,甚至jre的部分一些就是用C语言写的。还有我们如果要用到一些java没有封装的操作系统特性时,也是需要用本地方法。

3.Sun's Java:

Sun's的解释器使用C实现的,

java 硬件交互_Java关键字之native相关推荐

  1. java和硬件交互_Java内存模型

    Java内存模型 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存模式是一种虚拟机规范,真实并不存在 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JM ...

  2. java volatile 用法_java关键字volatile用法详解

    volatile关键字想必大家都不陌生,在java 5之前有着挺大的争议,在java 5之后才逐渐被大家接受,同时作为java的关键字之一,其作用自然是不可小觑的,要知道它是java.util.con ...

  3. Java jni 底层_Java中的native是如何实现的(JNI)

    什么是JNI JNI是Java Native Interface的缩写,Java本地接口(JNI)提供了将Java与C/C++.汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Jav ...

  4. java对象交互_Java 2 对象交互

    2.1 对象交互 2.1.1 时钟的设计: 用一个类来表示时钟和分钟. 对象Display: (属性)成员变量value limit (操作)成员函数increase getValue package ...

  5. java 硬件中断_Java异步事件:轮询与中断

    CPU几乎把所有的时间都花费在从内存获取指令并运行它们的过程中.然而,CPU和主存仅仅只是计算机硬件系统中众多组件的其中两个. 一个完整的系统还包含其他的设备,比如: 硬盘或者固态硬盘,用来存储程序和 ...

  6. java 线程交互_java 线程交互之wait/notify

    众所周知java支持多线程,有多线程就必然会存在多线程的交互,交互方式有多种,比如通过共享数据,或者通过提供的锁信号量等等,这里通过用wait以及notify实现线程交互. 要用好线程的wait和no ...

  7. java instanceof 动态_Java关键字instanceof用法及实现策略

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一 ...

  8. java foreach多线程_java关键字(一)

    原子操作 (1)除long和double之外的基本类型的赋值操作过程 (2)引用reference的赋值操作过程 (3)java.concurrent.Atomic.*包中所有类的一切操作 注释:lo ...

  9. Java关键字(二)——native

    本篇博客我们将介绍Java中的一个关键字--native. native 关键字在 JDK 源码中很多类中都有,在 Object.java类中,其 getClass() 方法.hashCode()方法 ...

最新文章

  1. SQL--(MyBatis 实战)
  2. CloudStack管理员文档 - 服务方案
  3. 【计算机网络】物理层 : 数据通信 ( 数据通信模型 | 信源 | 信宿 | 信道 | 通信方式 | 单工 | 半双工 | 全双工 | 数据传输方式 | 串行 | 并行 )
  4. linux网络编程常用函数详解与实例(socket--bind--listen--accept)
  5. JSP简单练习-JSP动作指令
  6. 史上最全Java多线程面试60题,含答案大赠送!
  7. input全选和取消全选
  8. 信息学奥赛一本通 1162:字符串逆序
  9. 别人家的公司!顺丰将向员工提供3亿贷款,无利息无抵押无担保
  10. Dumpsys Input Diagnostics
  11. 边看边练之Django(二)---- Django的URL设置
  12. xcode证书签名快速完美解决
  13. 第六章-网络可靠性设计
  14. Python学习week5
  15. 【Unity入门】24.碰撞检测
  16. C语言之大端模式与小端模式
  17. 2019年暑假 纪中培训总结
  18. 2.SpringBoot整合Mybatis(一对一)
  19. 利用iPS细胞筛选新药研究进展
  20. 中职计算机基础应用知识,总发中职《计算机应用基础:基础模块》第一单元 计算机基础知识.pptx...

热门文章

  1. android 36 线程通信
  2. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名...
  3. 转变矛头,号称攻破BCH网络的Bitpico或与BCE决裂
  4. nChain再获数字货币安全专利,助力BCH更加安全可靠
  5. 如何在centos7上网卡名称回归传统
  6. easyui英文提示变中文
  7. java线程间的通讯
  8. AngularJS 使用ngOption实现下拉列表
  9. 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
  10. Linux(ubuntu)下安装JDK