想一想上节中,我们提到了D代表double的方法.
想不起来不要紧,再贴一次
jfieldID id_salary = (*env)->GetFieldID(env, class_Employee, "salary", "D");
很困惑吧,D是个什么东西?
为了访问实例域和调用Java编程语言中定义的方法,你必须学习“编入”数据类型的名称和方法签名的规则(方法签名描述了参数和该方法返回值的类型)。下面是编码方案(类型签名):
在jni.h中有说明
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
上面是所有类型的对应签名。
所以,你要告诉java你想要的类型,你就需要使用这种方式。
我们看到最后一行,L对应的是object,那如果我们要表示String呢,要如下表示:
Ljava/lang/String
数组的表示如下:
[Ljava/lang/String
float[][]的表示如下:
[[F
要建立一个方法的完整签名,需要把括号内的参数类型都列出来,然后列出返回值的类型。
例如,一个接受两个整形参数并返回一个整数的方法编码为:
(II)I
前面使用过的print方法的签名是:
(Ljava/lang/String;)V
注意,在L表达式结尾处的分号是类型表达式的终止符,不是参数之间的分隔符,例如:
Employee(java.lang.String, double, java.util.Date)
具有签名如下:
(Ljava/lang/String;DLjava/util/Date;)V
看到了把,D和Ljava/util/Date;之间没有;。注意,即使对Java的构造器没有指定返回类型,也需要将V添加到虚拟机签名中。(等等,头有点疼。这类型签名规则。我表示无力吐槽了。您老再诡异点可以么?)
可以使用带有选项-s的javap命令来总类型文件产生方法签名,例如,运行javap -s -private Employee就可以得到所有变量和方法的签名了。
其实,设计者可以设计出简单的签名描述方法如void(int,java.lang.String)。但是,上面我们的方法,让你可以更接近虚拟机的编程奥秘。
分享到:
相关推荐
调用iphlpapi获得本地ip信息,C++源代码演示获取ip信息的全过程。
通过本地方法调用来调用C语言的例子,一个调用时间的,谨供参考
Android中调用js方法及js中调用本地方法,简单明了
jni本地调用4
注,chrome 通过注册表注册表 只能调用本地的 exe 或者bat文件,不能调用 ppt word 这样的问题,所以我用VB 写了一个exe 可以接收调用参数,这样只许注册一次就可以通过传参打开所有课执行文件了 由于1.exe是后台...
JS和Android本地方法之间的调用
【方法】html调用本地python程序进行交互 前后端交互
java调用本地打印机java调用本地打印机java调用本地打印机java调用本地打印机
web调用本地应用程序
js通过webview调用android的本地方法,避免addJavascriptInterface问题
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式 )。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各...
delphi编程实现调用本地程序,本实例可调用本地 截图工具、步骤记录器、画图工具、计算器、记事本、屏幕键盘、放大镜、任务管理器、命令提示符、控制面板、word和excel,用的是WinExec和ShellExecute方法,需要实现...
1、Dubbo 远程调用实现 2、内带zookeeper-3.4.5消息服务 3、直接导入myeclipse运行:dubbo-server导入tomcat中运行 4、dubbo-client 运行测试类/dubbo-client/src/com/fengjx/main/Consumer.java
借助WebSocket完成Android本地代码调用JavaScript代码的插件,并且可以获得返回值
该文档详细介绍了在Java代码中如何调用C或C++代码。主要思想是:将C或C++代码大包成动态链接库,然后共Java代码在执行时调用。
本地摄像头调用api
通过Java调用本地方法.pdf
在项目的开发过程我们离不开图片 而有时候需要调用本地的图片 有时候需要调用拍照图片 同时实现拍照的方法有两种 一种是调用系统拍照功能 另一种是自定义拍照功能 而本博文目前只讲解第一种方法 第二种方法后期在...