当前位置: 首页 > news >正文

张家港市网站制作网站图片展示源码

张家港市网站制作,网站图片展示源码,网站建设的相关费用,软件定制图片【0】README 1#xff09; 本文部分文字描述 转自 core java volume 2 #xff0c; 旨在理解 本地方法#xff08;JNI#xff09;——调用 java 方法 的基础知识 #xff1b; 2#xff09; C语言调用java 方法#xff0c;包括#xff1a; 静态C 方法 和 非静态C 方法…【0】README 1 本文部分文字描述 转自 core java volume 2 旨在理解 本地方法JNI——调用 java 方法 的基础知识 2 C语言调用java 方法包括 静态C 方法 和 非静态C 方法调用 java 方法 3为什么要这么做 因为本地方法常常需要从 传递给他的对象那里得到某种服务 4 for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter12/chapter12_61 【1】实例方法 1 使用如下函数调用 你可以从C 中调用任何java 方法 /* call the method */ (*env)-CallXxxxMethod(env, out, id_print, str); // (*env)-CallXxxxMethod(env, implicit parameter, methodID, explicit parameters); 2根据方法的返回类型用Void Int Object等来替换Xxx 就像你需要一个fieldID 来访问某个对象的一个域一样 你也需要一个方法的ID 来调用方法 3调用JNI函数 GetMethodID 并且提供该类 方法的名字和方法签名来获得方法ID /* get the method ID */ id_print (*env)-GetMethodID(env, class_PrintWriter, “print”, “(Ljava/lang/String;)V”); /* call the method */ (*env)-CallVoidMethod(env, out, id_print, str); 4problemsolution 4.1problem在我们的例子中 我们想要获得 PrintWriter 类的 print 方法的ID 但是PrintWriter 类有几个名为 print 的重载方法4.2solution 基于这个原因 你还必须提供一个字符串描述你想要使用的特定函数的参数和返回值4.3看个荔枝 例如我们想要使用 void print(java.lang.String) , 正如前一节讲到的那样 我们必须吧 签名 “混编”为字符串 “(Ljava/lang/String;)V” 5 下面是进行方法调用的完整代码 有以下几个 steps step1获取隐式参数的类step2获取方法IDstep3进行调用 /* get the class */class_PrintWriter (*env)-GetObjectClass(env, out);/* get the method ID */id_print (*env)-GetMethodID(env, class_PrintWriter, print, (Ljava/lang/String;)V);/* call the method */(*env)-CallVoidMethod(env, out, id_print, str); Attention 数值型的方法ID 和 域ID 在概念上和反射API 中的 Method 和 Field 对象相似。 你可以使用以下函数在两者之间进行转换 jobject ToReflectedMethod(JNIEnv* env, jclass class, jmethodID methodID); // return Method object methodID From ReflectedMethod(JNIEnv* env, jobject method); jobject ToReflectedField(JNIEnv* env, jclass class, jfield fieldID); // returns Field object fieldID FromReflectedField(JNIEnv* env, jobject field); 6 看个荔枝增强型Printf类 给他增加了一个与 C 函数 fprintf 类似的方法 也就是说 它能够在任意 PrintWriter 对象上打印一个字符串。 javac com/corejava/chapter12_61/Printf3.java javah com.corejava.chapter12_61.Printf3 mv com_corejava_chapter12_61_Printf3.h Printf3.h mv Printf3.h com/corejava/chapter12_61/ gcc -c -I /usr/java/jdk1.7/include/ -I /usr/java/jdk1.7/include/linux/ Printf3.c gcc -shared -fPIC -o libPrintf3.so Printf3.o 编译并运行Test java 文件 javac com/corejava/chapter12_61/Printf3Test.java java com.corejava.chapter12_61.Printf3Test 【2】静态方法 1从本地方法调用java的静态方法所需要的函数methods有 m1 要用GetStaticMethodID 和 CallStaticXxxMethod 函数m2当调用方法时 要提供类对象而不是隐式的参数对象 2看个荔枝让我们从本地方法调用以下静态方法 System.getProperty(“java.class.path”); // 返回值给出了当前类路径的字符串 3对以上代码调用的步骤解析Analysis A1首先 我们必须要找到用的类。 因为我们没有 System类的对象可供使用 所以我们使用 FindClass 而非 GetObjectClass jclass class_System (*env)-FindClass(env, “java/lang/System”); A2接着 我们需要静态 getProperty 方法的ID。 该方法的编码签名是 “(Ljava/lang/String;)Ljava/lang/String;” A3 既然参数和返回值都是 字符串 因此我们这样获取方法ID jmethodID id_getProperty (*env)-GetStaticMethodID(env, class_System, “getProperty”, “(Ljava/lang/String;)Ljava/lang/String;”) A4最后 我们进行调用。 注意类对象被传递给了 CallStaticObjectMethod 函数 jobject obj_ret (*env)-CallStaticObjectMethod(env, class_System, id_getProperty, (*env)-NewStringUTF(env, “java.class.path”)); 4 该方法的返回值是 jobject 类型的。如果我们想要吧它作为字符串操作 必须吧他转型为 jstring 【3】构造器 1创建新的 java 对象 本地方法可以通过调用构造器来创建新的java对象可以调用 NewObject 函数来调用构造器 jobject obj_new (*env)-NewObject(env, class, methodID, construction parameters); 2可以通过指定方法名为 “” 并指定构造器返回值为void的编码签名 从GetMethodID 函数中获取该调用必须的方法ID 3看个荔枝 const char[] filename ...; jstring str_filename (*env)-NewStringUTF(env, filename); jclass class_FileOutputStream (*env)-FindClass(env, java/io/FileOutputStream); jmethodID id_FileOutputStream (*env)-GetMethodID(env, class_FileOutputStream, init, (Ljava/lang/String;)V); jobject obj_stream (*env)-NewObject(env, class_FileOutputStream, id_FileOutputStream, str_filename); Attention 构造器的签名接受一个 java.lang.String 类型的参数 返回类型 为 void “(Ljava/lang/String;)V” 【4】替代方法调用 1有若干种JNI 函数的变体都可以从本地代码调用 java 方法 2CallNonvirtualXxxMethod函数接收一个隐式参数 一个方法ID 一个类对象必须对应于 隐式参数的超类 和一个显式参数。这个函数将调用指定的类中的指定版本的方法而不使用 常规的动态调度机制 3所有调用函数都有后缀A 和 V 的版本 用于接收数组中或 va_list 中的显式参数
http://www.yutouwan.com/news/467515/

相关文章:

  • 电子商务网站项目计划厦门网站制作全程服务
  • 一级a做爰片免费网站天天看株洲网站的建设
  • 做网站包域名包服务器多少钱佛山网站优化如何
  • 南宁网站建设公司哪家好新手建站教程报价单
  • 网站建设论文要求电商网站建设方式
  • 网站推广分销系统网站建设 域名 空间
  • 电子商务网站seo网站建设设计开发公司
  • 三明市住房和城乡建设局网站免费建站网页无需登陆
  • 佛山新网站建设渠道青白江区建设局网站
  • 上海做网站建设的公司wordpress建站教程书推荐
  • 班级建设网站首页建筑公司取名参考
  • 武清区网站建设网站开发服务商平台
  • 西安企业建站素材wordpress嵌入php代码
  • 做网站建设的电话销售申京效率值联盟第一
  • 分销网站怎么做龙岩网站设计理念
  • 免费免费建网站图片制作成视频
  • 恒通建设集团有限公司网站关于公司网站改版通知
  • 公司网站建设的建网站 服务器需要安装 tomcat
  • 濮阳建网站网红营销的优势在哪里
  • 网站开发样板十大新媒体平台有哪些
  • 新建的网站怎么上首页网站开发行情
  • 常德网站建设费用高密专业网站建设价格
  • 南宁自助建站模板下载网建公司转型
  • 网站制作具体步骤千锋教育培训多少钱
  • 宁波做百度网站哈尔滨开发网站
  • 做视频网站要什么主机邯郸网络名称
  • 笔记本电脑可以做网站服务器中国交通建设监理协会网站打不开
  • 长沙优化网站哪家公司好百度高级搜索技巧
  • 有哪些网站可以做h5html5网站网址
  • 网站结构图怎么做科技公司的网站