Java中的Native方法实现(C++)
对于Java内存机制是一个耳熟能详的内容,对于具体的代码实现和操作却很少提及到。对于理论的学习,个人认为还是需要能够在实际中进行操作才可以发现问题,有新的突破,给技术发展带来新的冲击。闲话少说,对于Java内存的Native方法的使用进行具体的介绍。
平台使用:DevC++软件version5.11,IDEAJ2018.3,Windows10系统下命令操作符
具体需要使用上述软件,各自的下载就不细说了。
1. [编写类文件]在IDEA中,编写本地的方法类文件,代码如下:
package native_method;public class NativeMethod { //类型可以自己任意取public native void h(String name); // 声明为本地方法,其中这个方法不可以用abstract 来修饰。static {System.loadLibrary("Test"); // 导入动态链接库,就是导入Test.dll 文件}public static void main(String[] args) {new NativeMethod().h("This is a NativeMethoddemo!");}
}
2. [生成.h文件]在Windows命令操作符中,进入到类的文件中,使用java -h . NativeMethod.java,产生java文件对应的.h文件:
![](/assets/blank.gif)
3. [创建DLL项目]在DevC++中,新建一个DLL动态链接库文件,文件的名称务必要和类文件加载的Libraries中的名称一样,此处为Test:
![](/assets/blank.gif)
4.[修改Test文件目录]刚新建的文件中,会有两个后缀分别为.h和.cpp的文件,首先创建两个文件夹为Sources和Headers,分别用于存储.h头文件和.cpp源文件。同时将系统本省产生的.h文件和.cpp文件删除:
![](/assets/blank.gif)
5. [添加.h和.cpp]在Headers目录下,右键添加,在文件目录下找到native_method_NativeMethod.h文件。同时在native_method_NativeMethod.h中,有头文件jni.h,将jni.h文件改为其绝对路径。打开jni.h文件,将对应的头文件jni_md.h引入到Headers中,并且将路径改为jni_md.h的绝对路径。如图:
提示:jni.h文件在Java安装路径的include文件下。jni_md.h在Java安装路径的include文件中的Win32文件夹下。
![](/assets/blank.gif)
![](/assets/blank.gif)
至此,我已经将所有需要的头文件进行了导入。接下来,将在Sources文件下编写.cpp源文件。
6. [编写.cpp文件]在Sources文件夹下添加.dllmain.cpp文件:
注意,导入的头文件都必须是绝对路径,编写.cpp文件时,主函数的格式需要和native_method_NativeMethod.h重定义的函数一样。
7. [编译]对dllmain.cpp文件进行编译,同时生成Test.dll文件:
8. [拷贝.dll]将Test.dll文件copy到Java工程目录下:
9. [运行.class]成功实现Native方法显示:
OK,到这里,我对于Native在新的领域有了新的认识,探索让技术更有趣~欢迎关注和闲聊~
Java中的Native方法实现(C++)相关推荐
- java中的native方法性能到底怎么样?
前言 java中的native方法性能到底怎么样? 第一次写博客,如果写的不好,望见谅,烦请指出问题,虚心学习 先说结论,native 方法性能不如java方法 一.native方法? 主要是java ...
- java中的Native方法
由于Native方法最近经常碰到,好奇之下便找到了这篇博客,内容还是相当好理解的,下面即是正文部分: 一. 什么是Native Method 简单地讲,一个Native Method就是一个java调 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- java中构造方法和方法全面解析
java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- JAVA中复制数组的方法
在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 ...
- 如何在java中调用js方法
[java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...
- java中的dispose()方法
java中的dispose()方法 先来看看 JAVA 1.5 的帮助文档的原文 - dispose - public void dispose() ****** 释放由此 Window.其子组件及其 ...
- java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...
为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...
最新文章
- Java学习笔记45:Java 线程与主线程之间的变量关系
- AI 热潮之下,初创企业能否躲过科技巨头的碾压?
- python跨进程共享内存
- “云计算”三部曲之二:与“云”共舞——再谈云计算
- JavaScript解析顺序和变量作用域
- 使用lamba中stream 进行分组统计
- P4824 [USACO15FEB]Censoring S kmp + 栈
- Fire!——两个BFS
- Zeppelin SDK :Flink 平台建设的基石
- 详解HTML5网页结构
- MJRefresh的使用
- 机器学习- 吴恩达Andrew Ng Week5 神经网络学习Neural Networks Learning知识总结
- 阿帕奇,StringUtil工具类,各种常用字符串的处理
- android sqlite同时读写,SQLite同时读写
- 《财务共享服务》读书笔记
- 战双帕弥什qq登录服务器未响应是什么意思,战双帕弥什qq登录
- MES系统报价这么高,企业为什么还要选择它?
- 企鹅杏仁集团完成2.5亿美元融资,投后估值超过10亿美元...
- mysql架设手游_战神引擎手游架设教程
- kdbp是什么文件_分子生物学中,Mb,kb,bp分别代表什么意思,它们之间怎么换算?...