Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉默王二
Jmx Java
提交
8b6a85f2
J
Jmx Java
项目概览
沉默王二
/
Jmx Java
9 个月 前同步成功
通知
160
Star
18
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jmx Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8b6a85f2
编写于
3月 06, 2023
作者:
沉默王二
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
C语言实现 Java native 方法
上级
c68cc341
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
11 addition
and
11 deletion
+11
-11
README.md
README.md
+1
-1
docs/home.md
docs/home.md
+1
-1
docs/oo/native-method.md
docs/oo/native-method.md
+9
-9
未找到文件。
README.md
浏览文件 @
8b6a85f2
...
...
@@ -132,7 +132,7 @@
-
[
简单过了一下Java中的包
](
docs/oo/package.md
)
-
[
Java中的变量:局部变量、成员变量、静态变量、常量
](
docs/oo/var.md
)
-
[
Java中的方法:实例方法、静态方法、抽象方法
](
docs/oo/method.md
)
-
[
手把手
将
你用 C语言实现 Java native 方法
](
docs/oo/native-method.md
)
-
[
手把手
教
你用 C语言实现 Java native 方法
](
docs/oo/native-method.md
)
-
[
Java中的构造方法:对象创建时的必经之路
](
docs/oo/construct.md
)
-
[
聊一聊Java中的访问权限修饰符
](
docs/oo/access-control.md
)
-
[
Java中的代码初始化块:对成员变量进行更复杂的赋值
](
docs/oo/code-init.md
)
...
...
docs/home.md
浏览文件 @
8b6a85f2
...
...
@@ -143,7 +143,7 @@ head:
-
[
简单过了一下Java中的包
](
oo/package.md
)
-
[
Java中的变量:局部变量、成员变量、静态变量、常量
](
oo/var.md
)
-
[
Java中的方法:实例方法、静态方法、抽象方法
](
oo/method.md
)
-
[
手把手
将
你用 C语言实现 Java native 方法
](
oo/native-method.md
)
-
[
手把手
教
你用 C语言实现 Java native 方法
](
oo/native-method.md
)
-
[
Java中的构造方法:对象创建时的必经之路
](
oo/construct.md
)
-
[
聊一聊Java中的访问权限修饰符
](
oo/access-control.md
)
-
[
Java中的代码初始化块:对成员变量进行更复杂的赋值
](
oo/code-init.md
)
...
...
docs/oo/native-method.md
浏览文件 @
8b6a85f2
---
title
:
手把手
将
你用 C语言实现 Java native 方法
title
:
手把手
教
你用 C语言实现 Java native 方法
shortTitle
:
用C语言实现本地方法
description
:
Java程序员进阶之路,小白的零基础Java教程,手把手
将
你用 C语言实现 Java native 方法
description
:
Java程序员进阶之路,小白的零基础Java教程,手把手
教
你用 C语言实现 Java native 方法
category
:
-
Java 核心
tag
:
...
...
@@ -52,7 +52,7 @@ protected native Object clone() throws CloneNotSupportedException;
JNI 一开始是为了本地已编译语言,尤其是 C 和 C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用 Java 与本地已编译的代码交互,通常会丧失平台可移植性,但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI 标准至少保证本地代码能工作能在任何 Java 虚拟机实现下。
![](
http
s://files.mdnice.com/user/3903/2673e6dd-5c85-4d17-b8a1-b6429706cde0
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-2a6fd1da-8b64-4fe1-bf3b-fbb117774549
.png
)
通过 JNI,我们就可以通过 Java 程序(代码)调用到操作系统相关的技术实现的库函数,从而与其他技术和系统交互;同时其他技术和系统也可以通过 JNI 提供的相应原生接口调用 Java 应用系统内部实现的功能。
...
...
@@ -120,17 +120,17 @@ public class HelloJNI {
在命令行通过
`javac HelloJNI.java`
来编译源代码。
![](
http
s://files.mdnice.com/user/3903/693f96cb-132a-4958-b155-1e3685723621
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-41e11e7f-31c1-4611-9b85-63ec211ff31b
.png
)
#### 03)使用 `javah -jni HelloJNI` 生成扩展名为 h 的头文件
![](
http
s://files.mdnice.com/user/3903/0d99c05e-4bf6-44e8-916a-96471d743f4b
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-0b08bf51-7bd9-4d06-a0dc-4262c1a71fd5
.png
)
>PS:Java 9 以后,javah 被弃用,取而代之的是使用 -h 选项来生成头文件,例如 `javac -h . ClassName.java`。
执行完毕后,会在 HelloJNI.java 所在目录下生成一个名为 HelloJNI.h 的头文件。打开 HelloJNI.h 文件,可以看到如下代码。
![](
http
s://files.mdnice.com/user/3903/4dafe442-71d1-41df-b04c-e96d892f39ad
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-e5c34f63-84df-4a99-96e1-b45ea04929df
.png
)
看不懂没关系,无所谓,直到它是自动生成的就好。
...
...
@@ -180,17 +180,17 @@ sh compile.sh
执行完毕后,会在当前目录下生成一个名为 libhello.dylib 的动态链接库。
![](
http
s://files.mdnice.com/user/3903/ccf86ab7-6dae-4ea2-9649-6dfb1bd977d9
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-e93c8fa8-6e33-4374-81da-8bd9360d1bb4
.png
)
#### 07)运行 HelloJNI
执行
`java HelloJNI`
命令运行 HelloJNI,如果一切正常,就会在终端上输出 Hello, JNI!。
![](
http
s://files.mdnice.com/user/3903/b10c0b70-6105-492d-819a-6e66c69021dd
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-34beba0f-8fe8-48d0-aa48-b25c1b504b59
.png
)
### **3、JNI 调用 C 的流程图**
![](
http
s://files.mdnice.com/user/3903/124a3a78-dc5f-445f-94cb-31194c498ec2
.png
)
![](
http
://cdn.tobebetterjavaer.com/tobebetterjavaer/images/oo/native-method-6673cf73-c4dd-4434-b821-0d705f756a73
.png
)
### **4、native 关键字**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录