本机方法与抽象方法具有相同的语法,但是在哪里实现呢?
Java中的本机方法是什么,应在哪里使用?
一旦看到一个小例子,就很清楚了:
Main.java :
public class Main {
public native int intMethod(int i);
public static void main(String[] args) {
System.loadLibrary("Main");
System.out.println(new Main().intMethod(2));
}
}
Main.c :
#include <jni.h>
#include "Main.h"
JNIEXPORT jint JNICALL Java_Main_intMethod(
JNIEnv *env, jobject obj, jint i) {
return i * i;
}
编译并运行 :
javac Main.java
javah -jni Main
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include \
-I${JAVA_HOME}/include/linux Main.c
java -Djava.library.path=. Main
输出 :
4
在Ubuntu 14.04上使用Oracle JDK 1.8.0_45进行了测试。
因此很明显,它允许您执行以下操作:
这可以用来:
以降低便携性为代价。
也可以从C调用Java,但是必须首先在C中创建JVM:如何从C++调用Java函数?
GitHub上的示例供您使用。
本机方法与抽象方法具有相同的语法,但它在哪里实现?
问题内容: Angularjs中angular.bind的用途是什么。请提供一个例子。无法从https://docs.angularjs.org/api/ng/function/angular.bind了解 问题答案: Angular.bind是一种实用功能,它结合了function.bind和部分功能应用程序中的功能。 绑定 (通常)是您想将当前上下文绑定到函数,但实际上在以后执行的想法。 在进
让这种方法本土化背后的逻辑是什么? 与仅使用哈希图制作内嵌字符串池相比,有什么优势? 它看起来有点奇怪,但在非本机代码中似乎很容易做到: 那么为什么是本机代码呢?
问题内容: 我正在与我的CompSci教授交谈,他建议将所有String 方法编写为: 而不是: 这两行都可以编译,但是我想知道第一种方法的好处是什么?我一直都是后一种方式。错了吗 什么是普通/常规? 问题答案: 第一种方法确保执行比较时不会收到 NullPointerException 。当您尝试在不存在的对象上调用方法时,抛出(发生)此异常。 以下是一些相关的切线:仔细阅读风险自负 不过要注意
问题内容: 我正在使用Java和Swing应用程序框架开发桌面应用程序。我有一个关于box的应用程序,我希望该box包含一些有关正在测试哪个版本的指示。我希望该值可以自动更改。我正在使用CruiseControl构建从SVN提交触发的应用程序。 他人使用什么机制来完成这项工作?是否有一个关于Box版本号的库或一组与蚂蚁相关的工具,我可以在构建过程中使用它们? 我不是在寻找部署选项,也不是在寻找自动
这就是我目前拥有所有实体类的方式(此处仅显示一个以供参考) 来自lombok参考: @Data注释可能是项目Lombok工具集中最常用的注释。它结合了@ToString、@EqualsAndHashCode、@Getter和@Setter的功能。本质上,在类上使用@数据与使用默认的@ToString和@EqualsAndHashCode注释该类以及使用@Getter和@Setter注释每个字段是一