栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java源码解析之六:JNI数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java源码解析之六:JNI数据类型

JNI有两种基本数据类型基本数据类型和引用数据类型

基本数据类型

在jnt.h中可以找到

//如果没在jni_md.中定义好的话
#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
//就使用下面的定义
typedef unsigned char   jboolean;
typedef unsigned short  jchar;
typedef short           jshort;
typedef float           jfloat;
typedef double          jdouble;

typedef jint            jsize;

找到jnt_md.h中的数据定义

 在jnt_md.h中找到如上定义,根据环境选择数据类型,根据X86架构找到jni_x86.h文件

#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)


// Note: please do not change these without also changing jni_md.h in the JDK
// repository
#ifndef __has_attribute
  #define __has_attribute(x) 0
#endif
#if (defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2))) || __has_attribute(visibility)
  #define JNIEXPORT     __attribute__((visibility("default")))
  #define JNIIMPORT     __attribute__((visibility("default")))
#else
  #define JNIEXPORT
  #define JNIIMPORT
#endif

  #define JNICALL
  typedef int jint;   
#if defined(_LP64)
  typedef long jlong;
#else
  typedef long long jlong;
#endif

#else
  #define JNIEXPORT __declspec(dllexport)
  #define JNIIMPORT __declspec(dllimport)
  #define JNICALL __stdcall

  typedef int jint;
  typedef __int64 jlong;
#endif

typedef signed char jbyte;

#endif 

引用数据类型

方法签名时用到的公共体类型
typedef union jvalue {
    jboolean z;
    jbyte    b;
    jchar    c;
    jshort   s;
    jint     i;
    jlong    j;
    jfloat   f;
    jdouble  d;
    jobject  l;
} jvalue;

属性ID和方法ID的定义
struct _jfieldID;
typedef struct _jfieldID *jfieldID;

struct _jmethodID;
typedef struct _jmethodID *jmethodID;

四种不同引用类型的定义
typedef enum _jobjectType {
     JNIInvalidRefType    = 0,
     JNILocalRefType      = 1,
     JNIGlobalRefType     = 2,
     JNIWeakGlobalRefType = 3
} jobjectRefType;

分别为JNIInvalidRefType(无效引用)、JNILocalRefType(本地引用)、JNIWeakGlobalRefType(弱全局引用)和JNIGlobalRefType(全局引用)的枚举类型

JNI错误类型的定义

#define JNI_FALSE 0
#define JNI_TRUE 1



#define JNI_OK           0                 
#define JNI_ERR          (-1)              
#define JNI_EDETACHED    (-2)              
#define JNI_EVERSION     (-3)              
#define JNI_ENOMEM       (-4)              
#define JNI_EEXIST       (-5)              
#define JNI_EINVAL       (-6)              



#define JNI_COMMIT 1
#define JNI_ABORT 2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/843006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号