Java中的native方法(java中native方法查看)

前言

在研读《深入理解Java虚拟机》这本书时,看到Java虚拟机运行时数据区中有关本地方法栈(Native Method Stack)的概念,本地方法栈就是为调用Native方法服务的,被Native修饰的方法不是由Java语言实现的,可以是C/C++实现,然后通过JNI(Java Native Interface)实现调用。当然也有Java虚拟机栈,是为Java方法服务的。本篇主要是想熟悉怎么样去调用Native方法。

通过JNI调用C++方法

  • 通过java代码调用C++的方法
import java.io.File;
public class Main {
    static {
        System.load("E:" + File.separator + "test.dll");
    }
    public native static void TestOne();
    public static void main(String[] args) {
        TestOne();
    }
}
  • 通过javac Main.java编译生成Main.class文件,然后执行javah Main会生成Main.h文件,目的就是为指定的类中的Native方式生成.h文件
  • 通过visual studio 2022创建一个C++的项目test,生成的dll名称需要和上述Java代码中加载的类库名称要一致
  • 将上面生成的Main.h,以及%JAVA_HOME/include/jni.h%和%JAVA_HOME/include/win32/jni_md.h%,三个文件复制到test目录下,如图所示:
  • 将上面三个文件添加到头文件中
  • 修改一下Main.h中的#include <jni.h>改成#include "jni.h"
  • 添加C++源文件Hello.cpp并添加如下的内容
#include "pch.h"
#include <iostream>
#include "Main.h"
using namespace std;

JNIEXPORT void JNICALL Java_Main_TestOne
(JNIEnv*, jclass)
{
	cout << "hello sherman" << endl;
}
  • 生成项目,复制test.dll,到E:\下(我这里是64位)
  • 直接运行java程序可以看到输出结果:"hello sherman"

相关文章

UG/NX批量转文件格式的常用方法(ug批量转换stp)

在使用UG软件的过程中,每位同学都难免会遇到文件格式转换的需求。特别是当需要将prt文件转换为中间格式时,常规的操作是打开文件并逐一导出为所需的格式。对于单个文件而言,这种方式虽然直接但略显繁琐;而当...

Java高效处理大文件读写的全方位指南

Java高效处理大文件读写的全方位指南在处理大数据量的文件读写操作时,Java为我们提供了多种方式来优化性能。今天就让我们一起探讨如何在Java中高效地读写大文件,让程序跑得更快更稳!首先,我们来聊聊...

Spring按业务模块输出日志到不同的文件

一、背景在我们开发的过程中,可能存在如下情况:1、有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的。如果我们自己系统的日志和第三方的日志混合到一个日志文件中,那么...

java文件字节流和字节缓冲流(java的字节流和字符流)

/*** 测试文件字节输入流和文件字节输出流* FileInputStream/FileOutputStream是以字节为单位存取文件,可用于存取二进制文件(图片、视频)和文本文件等,当存取文本文件时...

Java实战音视频领域:JavaCV推流(MP4文件)

欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览自己的mp4文件,如何让更多的人远程播放?如下图所...

开发这么久了,你会使用文档注释吗?Java 文档注释详解

前言 注释是一个文件的灵魂,在我们开发中,经常会查阅各种文档,文档上都会有很详细的注释,有的甚至都有示例,那么开发这么久了,你会使用文档注释吗?下面将进行java文档注释的介绍初始注释 注释作用:...