`

Java核心代码(四)native方法

 
阅读更多

 

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 { }

}

分享到:
评论

相关推荐

    Java2核心技术卷I+卷2:基础知识(第8版) 代码

    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调用动态链接库dll

    事实上,很多Java 核心代码内部就是使用JNI 实现的。这些Java 功能实际上是通过原 生函数提供的。 但是,使用JNI 对Java 开发者来说简直是一场噩梦。 如果你已经有了原生函数,使用JNI,你必须使用C 语言再编写一个...

    GraalVM最佳实践,使用Java开发.rar

    到目前为止,GraalVM提供了两种运行Java程序的方法:将Java HotSpot VM与GraalVM JIT(即时)编译器一起使用,以及第二种方法:使用GraalVM Native Image编译为本机可执行文件。 今天,我们很高兴地宣布一种在...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的数据是组成对象的核心,而方法 则环绕这个核心并隐藏在对象之中。 2.2.2 封装 "封装"是 OOP 语言的优点之一。把一个对象的数据加以包装并置于其方法的保护之下 称为封装。所谓封装就是对数据的隐藏。...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    JavaClass二进制文件加密专家

    JavaClass文件加密专家通过分析Class文件的结构,将Class二进制代码中耗时较多的部份抽出并替换为Native C代码, 并且使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件...

    Core Java 9th Edition(Vol1,Vol2)

    Java 核心编程第9版(英文版),内含卷1和卷2以及书中的源代码。掌握java编程的权威经典书籍之一。 注:本书第2卷,我特意进行了编辑,删除了网络上存在版本长达几百页的代码页面,总页码现在只有703页了。 Volume...

    java面试宝典

    35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有...

    安卓app开发之在WebView中通过javascript调用android中的java代码.这是hybrid app混合开发的核心技术所在----js和nat_安卓禁止浏览器调用app

    安卓app开发之在WebView中通过javascript调用android中的java代码.这是hybrid app混合开发的核心技术所在----js和native代码互相调用

    Java-Windows环境下OpenCV本机库文件

    Java + Opencv进行图像匹配、图像识别、计算机视觉处理时需要调用opencv本机库,光通过pom添加opencv的jar依赖...例:可直接将文件放入JDK文件中,使用代码直接加载:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    整理后java开发全套达内学习笔记(含练习)

    Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...

    java8看不到源码-graal-native-image-howto:构建Vert.x原生镜像

    核心代码。 这使得 vert.xa 非常适合编写原生图像。 然而,有几个已知的限制可以很容易地解决来构建本机映像。 本指南将涵盖这些限制,并解释如何将简单的 vert.x 应用程序调整为原生应用程序。 创建项目 首先创建一...

    深入浅出JNA—快速调用原生函数

    深入浅出JNA—快速调用原生函数 和许多解释执行的语言一样,Java提供了调用原生函数的机制,以加强Java平台的能力。...事实上,很多Java核心代码内部就是使用JNI实现的。这些Java功能实际上是通过原生函数提供的。

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    唯品会Java开发手册.zip

    结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。 开发工具在软件开发生命周期中...

    java8看不到源码-KiwiApkProtect:移动Android应用程序的加密

    Encryption:将Java代码翻译成C代码,实现对Native的保护。 So Packer: So 文件的终极 Packer,用于防止 IDA 工具进行反向分析。 内存保护:保护内存数据免受内存转储、篡改和其他攻击。 反调试:防止应用程序被 ...

    java8集合源码-gigya-nSS:为SAPCDC(Gigya)评估和呈现本机屏幕集的引擎

    java8集合源码SAP CDC (Gigya) 本机屏幕集 描述 Native Screen-Sets 允许您的应用保持原生体验,同时享受 SAP Customer Data Cloud web Screen-Sets 的好处。 它是一种低代码解决方案,用于提供高度可定制的用户界面...

    tns-core-modules-widgets:用于NativeScript模块中的小部件的存储库

    该库表示NativeScript 使用的本机代码(Java和Objective-C)。 是一个框架,使开发人员可以使用JavaScript和CSS为Android和iOS编写真正的本机移动应用程序。 有助于 我们喜欢公关! 查看和。 如果您想做出贡献,但...

    千方百计笔试题大全

    35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有...

Global site tag (gtag.js) - Google Analytics