native方法的方法体不需在java文件中实现 而在cpp文件中实现
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节
java应用需要与java外面的环境交互。这是本地方法存在的主要原因,如 与操作系统交互:
JVM支持着java语言本身和运行时库,它是java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。
然而不管怎 样,它毕竟不是一个完整的系统,它经常依赖于一些底层(underneath在下面的)系统的支持。
这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的,
还有,如果我们要使用一些java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。
public class Object {
private static native void registerNatives();//告诉JVM有native方法
static {
registerNatives();
}
public final native Class<?> getClass();
protected native Object clone() throws CloneNotSupportedException;
/**虽然Class也是extendsObject但不会死循环调
因为public String getName() {if (name == null)name = getName0();return name;}
private native String getName0();也是native的
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
protected void finalize() throws Throwable { }
}
相关推荐
Java 核心技术 卷1 Index Chapter 1: An Introduction to Java 1 Java As a Programming Platform 2 The Java “White Paper” Buzzwords 2 Java Applets and the Internet 7 A Short History of Java 9 ...
随着移动互联网的快速发展,应用的安全问题不断涌现出来,于是越来越多的应用开发者将核心代码由java层转到native层,以对抗成熟的java逆向分析工具,然而如果native层的代码如果没有进行任何保护,还是比较容易被...
事实上,很多Java 核心代码内部就是使用JNI 实现的。这些Java 功能实际上是通过原 生函数提供的。 但是,使用JNI 对Java 开发者来说简直是一场噩梦。 如果你已经有了原生函数,使用JNI,你必须使用C 语言再编写一个...
到目前为止,GraalVM提供了两种运行Java程序的方法:将Java HotSpot VM与GraalVM JIT(即时)编译器一起使用,以及第二种方法:使用GraalVM Native Image编译为本机可执行文件。 今天,我们很高兴地宣布一种在...
对象的数据是组成对象的核心,而方法 则环绕这个核心并隐藏在对象之中。 2.2.2 封装 "封装"是 OOP 语言的优点之一。把一个对象的数据加以包装并置于其方法的保护之下 称为封装。所谓封装就是对数据的隐藏。...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...
JavaClass文件加密专家通过分析Class文件的结构,将Class二进制代码中耗时较多的部份抽出并替换为Native C代码, 并且使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件...
Java 核心编程第9版(英文版),内含卷1和卷2以及书中的源代码。掌握java编程的权威经典书籍之一。 注:本书第2卷,我特意进行了编辑,删除了网络上存在版本长达几百页的代码页面,总页码现在只有703页了。 Volume...
35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有...
安卓app开发之在WebView中通过javascript调用android中的java代码.这是hybrid app混合开发的核心技术所在----js和native代码互相调用
Java + Opencv进行图像匹配、图像识别、计算机视觉处理时需要调用opencv本机库,光通过pom添加opencv的jar依赖...例:可直接将文件放入JDK文件中,使用代码直接加载:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...
核心代码。 这使得 vert.xa 非常适合编写原生图像。 然而,有几个已知的限制可以很容易地解决来构建本机映像。 本指南将涵盖这些限制,并解释如何将简单的 vert.x 应用程序调整为原生应用程序。 创建项目 首先创建一...
深入浅出JNA—快速调用原生函数 和许多解释执行的语言一样,Java提供了调用原生函数的机制,以加强Java平台的能力。...事实上,很多Java核心代码内部就是使用JNI实现的。这些Java功能实际上是通过原生函数提供的。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法...
结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。 开发工具在软件开发生命周期中...
Encryption:将Java代码翻译成C代码,实现对Native的保护。 So Packer: So 文件的终极 Packer,用于防止 IDA 工具进行反向分析。 内存保护:保护内存数据免受内存转储、篡改和其他攻击。 反调试:防止应用程序被 ...
java8集合源码SAP CDC (Gigya) 本机屏幕集 描述 Native Screen-Sets 允许您的应用保持原生体验,同时享受 SAP Customer Data Cloud web Screen-Sets 的好处。 它是一种低代码解决方案,用于提供高度可定制的用户界面...
该库表示NativeScript 使用的本机代码(Java和Objective-C)。 是一个框架,使开发人员可以使用JavaScript和CSS为Android和iOS编写真正的本机移动应用程序。 有助于 我们喜欢公关! 查看和。 如果您想做出贡献,但...
35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有...