想一想上节中,我们提到了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信息的全过程。
本案例将详细讲解如何在Java中通过本地方法调用C语言实现的功能,具体以一个调用系统时间的简单例子进行说明。 首先,我们来看`TimeShow.java`这个Java类,它通常包含了一个native方法声明,例如: ```java public...
在Java程序中调用用C++语言编写的本地方法,是通过Java本地接口(JNI)实现的,JNI是Java提供的一套标准编程接口,用于Java代码和本地应用程序或库之间的交互。本地库通常是用C或C++编写的动态链接库(在Windows上是...
在"JNI本地调用4"这个主题中,我们将深入探讨JNI的使用,特别是在执行本地方法和实现Java与C/C++代码集成时的关键知识点。 1. **JNI概述**:JNI是一个接口,提供了一套API,使得Java开发者可以编写本地方法来调用非...
本文将详细讲解如何在Android中调用JavaScript的方法,以及JavaScript如何反向调用Android本地方法。 首先,让我们从Android调用JavaScript的方法开始。Android中的WebView组件是实现这种交互的主要工具。当在...
为了实现这种交互,开发者通常需要理解JS与Android本地方法之间的调用机制。本篇将深入探讨这个主题,帮助你更好地理解和实践这两种技术的融合。 一、JavaScript与Android交互基础 1. Webview:Android中的WebView...
Java本地调用接口(Java Native Interface,简称JNI)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都扮演着关键角色,比如当需要访问操作系统特定功能、优化性能或者利用已...
注,chrome 通过注册表注册表 只能调用本地的 exe 或者bat文件,不能调用 ppt word 这样的问题,所以我用VB 写了一个exe 可以接收调用参数,这样只许注册一次就可以通过传参打开所有课执行文件了 由于1.exe是后台...
在Java编程环境中,调用本地打印机是一项常见的任务,特别是在企业级应用中,如报表生成、文档打印等场景。本文将详细讲解如何利用Java API来实现这一功能,以及可能遇到的问题和解决方案。 首先,Java提供了`java....
4. **批处理文件设计**:批处理文件应该简洁且易于维护,包含必要的逻辑来启动或控制本地程序。可能需要根据实际的程序路径和操作需求进行修改。 5. **注册表配置**:确保RemoteExpert.reg文件中的内容准确无误,...
4. **客户端(Client)**:客户端通过` LocateRegistry.getRegistry()` 获取RMI注册表的引用,然后调用`Registry.lookup()` 查找并获取远程对象的引用,最后通过这个引用调用远程方法。 5. **服务器(Server)**:...
标题提到的“Android-一个让http接口调用跟调用本地方法一样自然优雅的项目”正是为了解决这个问题,它旨在通过自动化的方式使得HTTP接口调用变得更为简洁、直观。 该项目的核心思想是将HTTP API与接口绑定,这样...
RMI的核心理念是让开发者能够像调用本地方法一样调用远程对象的方法,简化了分布式系统的设计和实现。 **什么是RMI** RMI(Remote Method Invocation)是一种Java技术,它提供了在不同网络节点上的Java虚拟机之间...
JS调用Android本地方法能够利用Web技术的灵活性和原生功能的强大性,为用户提供更好的体验。本篇文章将详细介绍如何在JS通过WebView调用Android的本地方法,同时规避`addJavascriptInterface`的安全问题。 首先,...
JNI(Java Native Interface)就是为了弥补这一不足,它允许Java代码调用本地方法,这些方法通常以库文件的形式存在,如Windows上的DLL(Dynamic Link Library)或UNIX上的SO(Shared Object)文件。通过JNI,Java...
本文将详细介绍如何在Java中调用本地exe文件,并解析提供的代码示例。 ### 一、Java中调用本地exe文件的基本原理 #### 1.1 调用本地exe文件的方式 在Java中,可以通过`java.lang.Runtime`类或者`java.lang....
- 性能开销:远程调用涉及序列化、网络传输等操作,性能不如本地调用。 - 复杂性:实现和维护较为复杂,尤其是处理异常情况时。 #### 六、总结 RMI为Java开发者提供了一种强大的工具,用于构建分布式应用。理解RMI...
使用Python调用微信本地ocr服务.zip使用Python调用微信本地ocr服务.zip使用Python调用微信本地ocr服务.zip使用Python调用微信本地ocr服务.zip使用Python调用微信本地ocr服务.zip使用Python调用微信本地ocr服务.zip...
总的来说,Windows下浏览器调用本地应用程序的方法包括使用ActiveXObject(仅限IE)、创建.url快捷方式和注册自定义URL协议等。需要注意的是,这些方法都涉及对用户计算机的访问,因此在实际应用中必须谨慎处理,以...