java中的native
本地代码是java方法的实施是由并非java代码提供。
在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。,下面给了一个示例:
public class IHaveNatives
{
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 ;
}
1.native修饰符
当native作为修饰符使用时,表示被修饰的方法由本地语言实现。如:java.lang.System.arraycopy() 这个方法在java类中就是->public static native void arraycopy();
也就是说这个方法的具体实现内容是由C++或着其他语言实现的。
其实利用 native 修饰,也可以称为JNI实现。即由Java本地接口,实现(C++,C 或其他语言)。
标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。
native与其它java标识符连用时,其意义同非Native Method并无差别,比如native static表明这个方法可以在不产生类的实例时直接调用,这非常方便,比如当你想用一个native method去调用一个C的类库时。上面的第三个方法用到了native synchronized,JVM在进入这个方法的实现体之前会执行同步锁机制(就像java的多线程。)
2.native方法
一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。
一个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程序可以做任何应用层次的任务。
分享到:
相关推荐
在深入探讨Java中native方法的学习之前,我们先来理解一下native方法的概念以及它在Java中的作用。Native方法是Java编程语言中的一个特性,允许Java代码调用非Java代码(通常是C或C++编写的),这为Java应用程序提供...
### Java中native方法和JNI基础 #### 一、引言 在Java开发中,有时候我们需要扩展Java程序的功能,特别是当需要直接访问操作系统底层资源(如系统硬件)时,或者为了提高程序性能,这时就需要借助于Java Native ...
初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。 一、认识 native 即 JNI,Java...
Java的`native`关键字在Java编程中扮演着特殊的角色,它是Java语言与底层操作系统交互的重要桥梁。本资源包是针对Java中的`native`关键字的学习资料,对于想要深入了解Java本地接口(JNI,Java Native Interface)的...
JNI(java native interface) 简体中文:do.chuan@gmail.com 翻译版 英文版:Addison.Wesley.Java.Native Interface 希望对大家有帮助...
### JNI(Java Native Interface)中文手册关键知识点解析 #### 一、前言及背景 JNI(Java Native Interface)是Sun Microsystems公司定义的一套标准接口,用于实现Java代码与本地代码(通常是C或C++)之间的交互。...
Java中的`native`关键字是用来声明一个方法为原生方法,这意味着该方法的实现不在Java代码中,而是由非Java语言(如C或C++)在本地代码中提供。原生方法是Java与操作系统或其他底层系统资源进行直接交互的重要手段,...
主要为大家详细介绍了微信支付java版本之Native付款,感兴趣的小伙伴们可以参考一下
这个"java native 中的C代码"主题涉及到Java程序如何利用JNI来调用本地(非Java)代码,特别是在处理操作系统特定功能,如访问注册表这样的任务时。 当我们谈论"注册表",这是在Windows操作系统中存储配置信息的...
Java中的`native`关键字用于标记一个方法,表明该方法的实现并不在Java代码中,而是由其他语言(通常是C或C++)在本地代码(Native Code)中实现。这种特性使得Java能够与操作系统底层或者其他非Java语言编写的库...
This library allows developers to access native libraries (DLL and lib.so) from java. You do NOT need to compile a line of C/C++ to use it: it's dynamic !! Now Win32 DLL and shared libraries are ...
在这个Java网页Native微信支付源码中,我们可以深入理解微信支付的API调用、二维码生成以及支付回调处理等关键流程。 1. **微信支付接口调用**: - 微信支付提供了多种接口供开发者使用,如统一下单接口(Unified ...
Java Native Interface(JNI)是Java平台的一个重要组成部分,它允许Java代码和其他语言写的代码进行交互。这个"Java Native Interface Programmers Guide and Specification(Exp)"很可能是一份详细解释JNI编程指南...
JNI)是一种框架,允许Java代码调用本地应用编程接口(Native Application Programming Interfaces, Native APIs)以及将本地方法嵌入到Java虚拟机(Java Virtual Machine, JVM)中运行。这一功能对于那些需要与...
The definitive JNA reference (including an overview ...JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required......
JNA java native access
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library...开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。
Java中的Native方法是Java语言与本地(Native)代码交互的一种机制,主要涉及到Java的JNI(Java Native Interface)技术。JNI允许Java程序调用C、C++等非Java编写的代码,反之亦然,使得Java可以充分利用本地平台的...
THIS book covers the Java™ Native Interface (JNI). It will be useful to you if you are interested in any of the following: • integrating a Java application with legacy code written in languages such...
微信NATIVE扫码支付JAVA实现