`
wsjiang
  • 浏览: 393938 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JNI字段描述符“([Ljava/lang/String;)V” --- 语法定义

阅读更多

    “([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。一个数组int[],就需要表示为这样"[I"。如果多个数组double[][][]就需要表示为这样 "[[[D"。也就是说每一个方括号开始,就表示一个数组维数。多个方框后面,就是数组 的类型。

 

     如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符串,然后分号“;”结束。

 

     比如"Ljava/lang/String;"就是表示类型String;

 

     "[I"就是表示int[];

 

     "[Ljava/lang/Object;"就是表示Object[]。

 

     JNI方法描述符,主要就是在括号里放置参数,在括号后面放置返回类型,如下:

 

   (参数描述符)返回类型

 

    当一个函数不需要返回参数类型时,就使用”V”来表示。

 

    比如"()Ljava/lang/String;"就是表示String f();

 

    "(ILjava/lang/Class;)J"就是表示long f(int i, Class c);

 

    "([B)V"就是表示void String(byte[] bytes);

 

Java 类型

符号

Boolean

Z

Byte

B

Char

C

Short

S

Int

I

Long

J

Float

F

Double

D

Void

V

objects对象

以"L"开头,以";"结尾,中间是用"/" 隔开的包及类名。比如:Ljava/lang/String;如果是嵌套类,则用$来表示嵌套。例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

 

     另外数组类型的简写,则用"["加上如表A所示的对应类型的简写形式进行表示就可以了,比如:[I 表示 int [];[L/java/lang/objects;表示Objects[],另外。引用类型(除基本类型的数组外)的标示最后都有个";"

 

     例如:

 

             "()V" 就表示void Func();

 

             "(II)V" 表示 void Func(int, int);

 

             "(Ljava/lang/String;Ljava/lang/String;)I".表示 int Func(String,String)

分享到:
评论

相关推荐

    Java JNI调用动态库(Linux、Windows)的实现步骤

    * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_jni_Demo_Hello2(JNIEnv *, jobject, jstring); //--------------------------------------------------------------------------- /* ...

    Qt android 发短信,查看短信

    env->CallVoidMethod(smsManagerWrapperClass.object(), env->GetMethodID(smsManagerWrapperClass.classInfo(), "sendTextMessage", "(Ljava/lang/String;Ljava/lang/String;)V"), smsRecipient.object(), smsText....

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

    错误Amr文件修复

    * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_cn_com_util_Jni_convert_1mp3_1mehtod (JNIEnv *env, jobject jot, jstring _path); #ifdef __cplusplus } #endif #...

    jni java调用c/c++

    * Signature: (Ljava/lang/String;I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject, jstring, jint); #ifdef __cplusplus } #endif #endif ``` 实现 ...

    在JNI中得到手机IMEI号

    jfieldID TELEPHONY_SERVICE = env->GetStaticFieldID(cls_context, "TELEPHONY_SERVICE", "Ljava/lang/String;"); jstring str = (jstring)env->GetStaticObjectField(cls_context, TELEPHONY_SERVICE); jobject...

    java native interface(JNI)开发全攻略

    这个类中定义了一个本地方法`HelloWorld`,并使用`native`关键字标明该方法需要通过JNI来调用本地代码。 ```java public class NativeHello { public native void HelloWorld(String str); static { System....

    AndroidNDKSimple

    //----字符串处理 (java中编码为utf-16,android为utf-8),jni不能直接使用string---- private native String passStringReturnString(String string); //--基本类型--- private native int add(int a, ...

    JNI技术手册 c/c++调用java

    jmethodID method = (*env)->GetStaticMethodID(env, clazz, "helloWorld", "()Ljava/lang/String;"); jstring result = (jstring)(*env)->CallStaticObjectMethod(env, clazz, method); const char* resultStr =...

    jni数值传递

    * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_JniDemo_passString (JNIEnv *, jobject, jstring); /* * Class: JniDemo * Method: passIntArray * Signature: (...

    JNI 教程 java与c/c++互相调用

    - **JNI接口定义**:JNI定义了一套接口和数据类型,使得Java和本地代码可以互相调用函数。 - **头文件`jni.h`**:C/C++代码中需要包含`jni.h`头文件,该文件包含了所有JNI相关的函数声明和数据类型定义。 - **...

    JNI 参数传递 Android 自定义对象

    jfieldID myFieldID = (*env)->GetFieldID(env, myClass, "myField", "Ljava/lang/String;"); jstring fieldValue = (*env)->GetObjectField(env, customObject, myFieldID); // 修改字段值 (*env)->SetObjectField...

    JNI语法.zip

    JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中尤其重要,特别是在需要利用硬件加速、底层库或者提高性能的应用场景下,开发者会借助C/...

    android jni 编程

    {"getHelloWorld", "()Ljava/lang/String;", (void *) Java_JNIExample_getHelloWorld}, {"add", "(II)I", (void *) Java_JNIExample_add}, {"concatStrings", "(Ljava/lang/String;Ljava/lang/String;)Ljava/...

    JNI 调 C C++ 参数String

    在标题“JNI 调 C/C++ 参数String”中,我们将探讨如何通过JNI传递Java的String类型参数到C或C++函数,并在本地代码中进行处理。 首先,让我们了解JNI的基本结构。要使用JNI,你需要创建一个Java类,声明一些 ...

    JNI 测试样例

    - **GetMethodID**:获取Java方法的ID,例如`GetMethodID(env, cls, "toString", "()Ljava/lang/String;");` - **NewObject**:创建一个新的Java对象,例如`env->NewObject(cls, mid);` - **CallVoidMethod/...

    jni 调用对象以及数组

    jfieldID fieldID = env->GetFieldID(cls, "fieldName", "Ljava/lang/String;"); env->SetObjectField(obj, fieldID, newString); ``` 3. **处理Java数组:** JNI支持各种类型的数组,包括基本类型和引用类型。...

    jni本地函数注册

    {"readBmp", "(Ljava/lang/String;[CLbmp/view/w_h;)V", (void *)tcxt_readBmp}, // ... }; ``` 其中,`readBmp`是本地方法名,`(Ljava/lang/String;[CLbmp/view/w_h;)V`是方法签名,`tcxt_readBmp`是对应的...

    Android APP 用interface 接口的形式对jni进行回调,实例测试

    jmethodID onCallbackMethod = env->GetMethodID(callbackClass, "onCallback", "(Ljava/lang/String;)V"); // 创建一个字符串参数 std::string hello = "Hello from JNI!"; jstring jhello = env->...

    jni返回对象数组例子

    jmethodID constructor = env->GetMethodID(personClass, "<init>", "(Ljava/lang/String;I)V"); jobjectArray array = env->NewObjectArray(2, personClass, NULL); jstring name1 = env->NewStringUTF("张三")...

Global site tag (gtag.js) - Google Analytics