本机方法与抽象方法具有相同的语法,但它在哪里实现?
该方法在“本机”代码中实现。也就是说,不在JVM中运行的代码。它通常用C或C编写。
本机方法通常用于与用其他编程语言编写的系统调用或库进行接口。
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));
}
}
主. 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上的示例供您使用。
问题内容: 本机方法与抽象方法具有相同的语法,但是在哪里实现呢? 问题答案: Java中的本机方法是什么,应在哪里使用? 一旦看到一个小例子,就很清楚了: Main.java : Main.c : 编译并运行 : 输出 : 在Ubuntu 14.04上使用Oracle JDK 1.8.0_45进行了测试。 因此很明显,它允许您执行以下操作: 使用Java中的任意汇编代码调用经过编译的动态加载的库(
关于什么时候使用Docker而不是VM的,有什么指导方针吗?(反之亦然) 在我看来,像NGINX、Apache或Redis这样的服务应该是docker,但我不确定是否应该在HPC环境中使用ElasticSearch docker。 Docker总是比VM好吗?
在中有一个新控件,名为。下面是它的图片。 它的描述是 为外部故事板中的视图控制器提供占位符。连接到此占位符的Segue将在运行时实例化引用的视图控制器。 所以问题是 在什么情况下我们应该使用这个 这是否用于通过segue连接两个故事板的视图控制器 这种方法是否用于以编程方式替代另一个故事板的VC 它能在旧的iOS版本(iOS 9之前)上工作吗
我有一个变量(testvariable),根据变量的isNull,我需要做一个方法调用,如下所示 在可选的
这是我的代码: 这是android文档中给出的默认值。我只是改了网址。 这是我的错误消息: java.lang.StringIndexOutOfBoundsException:长度=28;RegionStart=1;RegionLength=499在java.lang.String.SubString(String.java:1931)在com.example.my.app.MainActivit
我知道JVM使用属性在运行时定位本机库。我试图用本机依赖项位置配置Eclipse。 但是在中有许多地方我可以指定位置。 源选项卡->本机库位置 null null 如果它们都指向同一个目的地,为什么会有这么多配置项? 到目前为止,我的猜测是,Eclipse的设计者希望这种方式能够帮助程序员更有逻辑地组织他们的本机库。