返回顶部
首页 > 资讯 > 精选 >Java中的Native修饰符怎么用
  • 689
分享到

Java中的Native修饰符怎么用

2023-06-29 12:06:15 689人浏览 泡泡鱼
摘要

这篇文章主要介绍Java中的Native修饰符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Native修饰符的使用native主要用于方法上一个native方法就是一个Java调用非Java代码的接口。一个n

这篇文章主要介绍Java中的Native修饰符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Native修饰符的使用

native主要用于方法上

一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或c++实现。

在定义一个native方法时,并不提供实现体(比较像定义一个Java Interface),因为其实现体是由非Java语言在外面实现的。

说明

Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。

JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。

Invocation api(JNI的一部分)可以用来将Java虚拟机JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。

举例

jdk源码中,以system.class为例,由于调用操作系统的相关方法,而操作的实现并不是用Java,所以就会有很多native修饰的方法

Java中的Native修饰符怎么用

Native修饰的方法到底有什么用处

今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法。

public native String GSMModemSMSReadAll(String s, int i);public native String GSMModemGetErrORMsg(String s);public native boolean GSMModemIsConn(String s);

觉得挺有趣的,找了找网络上的资料,感觉不错。又一个使用java调用别的语言的方法(以前不知道-_#)

今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解。

什么是Native Method

简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

"A native method is a Java method whose implementation is provided by non-java code."

在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。,下面给了一个示例:  

   public class IHaveNatives    {undefined      native public void Native1( int x ) ;      native static public long Native2() ;      native synchronized private float Native3( Object o ) ;      native void Native4( int[] ary ) throws Exception ;    }

这些方法的声明描述了一些非java代码在这些java代码里看起来像什么样子(view).

标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。native与其它java标识符连用时,其意义同非Native Method并无差别,比如native static表明这个方法可以在不产生类的实例时直接调用,这非常方便,比如当你想用一个native method去调用一个C的类库时。上面的第三个方法用到了native synchronized,JVM在进入这个方法的实现体之前会执行同步机制(就像java的多线程。)

一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。这些方法的实现体可以制一个异常并且将其抛出,这一点与java的方法非常相似。当一个native method接收到一些非基本类型时如Object或一个整型数组时,这个方法可以访问这非些基本型的内部,但是这将使这个native方法依赖于你所访问的java类的实现。有一点要牢牢记住:我们可以在一个native method的本地实现中访问所有的java特性,但是这要依赖于你所访问的java特性的实现,而且这样做远远不如在java语言中使用那些特性方便和容易。

native method的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节。需要注意当我们将一个本地方法声明为final的情况。用java实现的方法体在被编译时可能会因为内联而产生效率上的提升。但是一个native final方法是否也能获得这样的好处却是值得怀疑的,但是这只是一个代码优化方面的问题,对功能实现没有影响。

如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方(这个似乎看起来有些奇怪),同样的如果一个本地方法被fianl标识,它被继承后不能被重写。

本地方法非常有用,因为它有效地扩充了jvm.事实上,我们所写的java代码已经用到了本地方法,在sun的java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越java运行时的界限。有了本地方法,java程序可以做任何应用层次的任务。

为什么要使用Native Method

java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。

与java环境外交互:有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节。

与操作系统交互:JVM支持着java语言本身和运行时库,它是java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。然而不管怎 样,它毕竟不是一个完整的系统,它经常依赖于一些底层(underneath在下面的)系统的支持。这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用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调用。

JVM怎样使Native Method跑起来

我们知道,当一个类第一次被使用到时,这个类的字节码会被加载到内存,并且只会回载一次。在这个被加载的字节码的入口维持着一个该类所有方法描述符的list,这些方法描述符包含这样一些信息:方法代码存于何处,它有哪些参数,方法的描述符(public之类)等等。

如果一个方法描述符内有native,这个描述符块将有一个指向该方法的实现的指针。这些实现在一些DLL文件内,但是它们会被操作系统加载到java程序的地址空间。当一个带有本地方法的类被加载时,其相关的DLL并未被加载,因此指向方法实现的指针并不会被设置。当本地方法被调用之前,这些DLL才会被加载,这是通过调用java.system.loadLibrary()实现的。

最后需要提示的是,使用本地方法是有开销的,它丧失了java的很多好处。如果别无选择,我们可以选择使用本地方法

以上是“Java中的Native修饰符怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java中的Native修饰符怎么用

本文链接: https://lsjlt.com/news/324589.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中的Native修饰符怎么用
    这篇文章主要介绍Java中的Native修饰符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Native修饰符的使用native主要用于方法上一个native方法就是一个Java调用非Java代码的接口。一个n...
    99+
    2023-06-29
  • 聊聊Java中的Native修饰符
    目录Native修饰符的使用native主要用于方法上说明举例Native修饰的方法到底有什么用处什么是NativeMethod为什么要使用NativeMethodJVM怎样使Nat...
    99+
    2024-04-02
  • Vue.js中.native修饰符的作用是什么
    本篇文章为大家展示了Vue.js中.native修饰符的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。.native修饰符官方对.native修饰符的解释...
    99+
    2024-04-02
  • java中final修饰符怎么用
    小编给大家分享一下java中final修饰符怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   一、final修饰符定义...
    99+
    2024-04-02
  • Vue的native修饰符有什么作用及怎么使用
    这篇文章主要介绍“Vue的native修饰符有什么作用及怎么使用”,在日常操作中,相信很多人在Vue的native修饰符有什么作用及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue的native修...
    99+
    2023-07-04
  • java中的static修饰符怎么使用
    这篇文章主要讲解了“java中的static修饰符怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中的static修饰符怎么使用”吧!static关键词用于声明独立于对象的静态...
    99+
    2023-07-06
  • java中private修饰符怎么使用
    本篇内容介绍了“java中private修饰符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在java中,private的意思为“私...
    99+
    2023-07-04
  • java修饰符修饰什么
    Java语言提供了很多修饰符,主要分为以下两类:访问修饰符 (推荐学习:java课程)非访问修饰符修饰符用来修饰类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明:public class ClassName { ...
    99+
    2015-03-04
    java入门 java
  • Java中的private修饰符是怎么样的
    Java中的private修饰符是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的...
    99+
    2023-06-17
  • vue.js中修饰符.stop怎么用
    本文小编为大家详细介绍“vue.js中修饰符.stop怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue.js中修饰符.stop怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。修饰符.stop的用法...
    99+
    2023-06-29
  • java内部类修饰符怎么使用
    在Java中,内部类的修饰符可以是public、protected、private和static。以下是这些修饰符的使用方式:1. ...
    99+
    2023-09-15
    java
  • Java修饰符abstract、static和final怎么用
    本文小编为大家详细介绍“Java修饰符abstract、static和final怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java修饰符abstract、static和final怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-29
  • 怎么获取java类中的字段修饰符
    这篇文章主要介绍怎么获取java类中的字段修饰符,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优...
    99+
    2023-06-14
  • java类中的字段修饰符怎么获取
    本篇内容主要讲解“java类中的字段修饰符怎么获取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java类中的字段修饰符怎么获取”吧!1、说明类中的字段有很多修饰符,比如public、priva...
    99+
    2023-07-06
  • java中访问修饰符的作用是什么
    Java中的访问修饰符用于控制类、变量、方法等成员的访问权限。访问修饰符包括public、protected、private和默认(...
    99+
    2024-03-12
    java
  • java修饰符是什么?
    java修饰符用来定义类、方法或者变量,通常放在语句的最前端。(推荐:java视频教程)Java语言提供了很多修饰符,主要分为以下两类:访问修饰符非访问修饰符Java语言定义了public、protected、private、abstrac...
    99+
    2019-07-25
    java 修饰符
  • java接口的修饰符怎么定义
    这篇文章主要介绍了java接口的修饰符怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java接口的修饰符怎么定义文章都会有所收获,下面我们一起来看看吧。java接口的修饰符可以是abstract和fin...
    99+
    2023-07-04
  • Java中有哪些常用修饰符
    本篇文章为大家展示了Java中有哪些常用修饰符,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、abstract 抽象的抽象类:被abstract 修饰的类语法: abstrac...
    99+
    2023-06-15
  • vue事件修饰符和按键修饰符怎么使用
    本篇内容主要讲解“vue事件修饰符和按键修饰符怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue事件修饰符和按键修饰符怎么使用”吧!在事件处理程序中调用 event.preventDe...
    99+
    2023-07-04
  • 详解Java中的访问修饰符
    详解Java中的访问修饰符?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、作用及种类UML类图建模语言或标准建模语言类的属性、操作中的可见性使用+、#、-分别...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作