对于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文件:

NativeMethod.class

3. [创建DLL项目]在DevC++中,新建一个DLL动态链接库文件,文件的名称务必要和类文件加载的Libraries中的名称一样,此处为Test:

创建DLL文件

4.[修改Test文件目录]刚新建的文件中,会有两个后缀分别为.h和.cpp的文件,首先创建两个文件夹为Sources和Headers,分别用于存储.h头文件和.cpp源文件。同时将系统本省产生的.h文件和.cpp文件删除:

DLL文件目录

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文件夹下。

native_method_NativeMethod.h

jni.h

至此,我已经将所有需要的头文件进行了导入。接下来,将在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++)相关推荐

  1. java中的native方法性能到底怎么样?

    前言 java中的native方法性能到底怎么样? 第一次写博客,如果写的不好,望见谅,烦请指出问题,虚心学习 先说结论,native 方法性能不如java方法 一.native方法? 主要是java ...

  2. java中的Native方法

    由于Native方法最近经常碰到,好奇之下便找到了这篇博客,内容还是相当好理解的,下面即是正文部分: 一. 什么是Native Method 简单地讲,一个Native Method就是一个java调 ...

  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  4. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  5. java中构造方法和方法全面解析

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

  6. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  7. JAVA中复制数组的方法

     在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 ...

  8. 如何在java中调用js方法

    [java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...

  9. java中的dispose()方法

    java中的dispose()方法 先来看看 JAVA 1.5 的帮助文档的原文 - dispose - public void dispose() ****** 释放由此 Window.其子组件及其 ...

  10. java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...

    为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...

最新文章

  1. Java学习笔记45:Java 线程与主线程之间的变量关系
  2. AI 热潮之下,初创企业能否躲过科技巨头的碾压?
  3. python跨进程共享内存
  4. “云计算”三部曲之二:与“云”共舞——再谈云计算
  5. JavaScript解析顺序和变量作用域
  6. 使用lamba中stream 进行分组统计
  7. P4824 [USACO15FEB]Censoring S kmp + 栈
  8. Fire!——两个BFS
  9. Zeppelin SDK :Flink 平台建设的基石
  10. 详解HTML5网页结构
  11. MJRefresh的使用
  12. 机器学习- 吴恩达Andrew Ng Week5 神经网络学习Neural Networks Learning知识总结
  13. 阿帕奇,StringUtil工具类,各种常用字符串的处理
  14. android sqlite同时读写,SQLite同时读写
  15. 《财务共享服务》读书笔记
  16. 战双帕弥什qq登录服务器未响应是什么意思,战双帕弥什qq登录
  17. MES系统报价这么高,企业为什么还要选择它?
  18. 企鹅杏仁集团完成2.5亿美元融资,投后估值超过10亿美元...
  19. mysql架设手游_战神引擎手游架设教程
  20. kdbp是什么文件_分子生物学中,Mb,kb,bp分别代表什么意思,它们之间怎么换算?...

热门文章

  1. 虎牙与斗鱼达成合并协议;希尔顿集团大中华区南部地区总部迁入深圳新址 | 美通企业日报...
  2. 直流无刷电机无感检测电路原理
  3. ZigBee(CC2530)(03)数据手册分享(英文+中文)
  4. 前端页面劫持和反劫持
  5. 着色近似算法——韦尔奇-鲍威尔(Welch-Powell)点着色算法
  6. Qt视频直播软件--项目实战(Day3)
  7. 关于后台模块的理解。
  8. (转)2012年度最佳Web前端开发工具和框架
  9. RH850F1x Starter Kit V3用户手册(中文翻译版)
  10. 片袖原型制图_袖原型一片袖打版干货