Object 的 registerNatives() 方法的作用

通常情况下,为了使JVM发现您的本机功能,他们被一定的方式命名。例如,对于java.lang.Object.registerNatives,对应的C函数命名为Java_java_lang_Object_registerNatives。通过使用registerNatives(或者更确切地说,JNI函数RegisterNatives),您可以命名任何你想要你的C函数。

这里是相关的C代码(来自OpenJDK6):

static JNINativeMethod methods[] = {

{“hashCode”, “()I”, (void *)&JVM_IHashCode},

{“wait”, “(J)V”, (void *)&JVM_MonitorWait},

{“notify”, “()V”, (void *)&JVM_MonitorNotify},

{“notifyAll”, “()V”, (void *)&JVM_MonitorNotifyAll},

{“clone”, “()Ljava/lang/Object;”, (void *)&JVM_Clone},

};

JNIEXPORT void JNICALL

Java_java_lang_Object_registerNatives(JNIEnv *env, jclass cls)

{

(*env)->RegisterNatives(env, cls,methods, sizeof(methods)/sizeof(methods[0]));

}

(请注意,Object.getClass不在列表上;它仍然被称作Java_java_lang_Object_getClass的“标准”的名称。)对于列出的功能,相关的C函数如在该表中,这比写一堆转发功能更加得心应手。

如果你是在C程序中嵌入Java并且想要这个程序本身内的链接到这个函数,注册本地函数也是有用的,因为这些通常不会通过标准方法查找机制被发现。注册本地函数也可以用来“重新绑定”一个本地方法到另一个C函数(这会有用如果你的程序支持动态加载和卸载模块)。

鼓励大家阅读JNI书,其中谈到这一点还有其他的等等。

时间: 2024-07-29 19:57:09

Object 的 registerNatives() 方法的作用的相关文章

Object中有哪些方法及其作用

你知道Object中有哪些方法及其作用吗? 一.引言 二.Object方法详解 1.1.registerNatives() 1.2.getClass() 1.2.1.反射三种方式: 1.3.hashCode() 1.4.equals() 1.4.clone() 1.5.toString() 1.6.wait()/ wait(long)/ waite(long,int) 1.7.notify()/notifyAll() 1.8.finalize() 1.8.1.对象在内存中的状态 1.8.2.垃圾

你知道Object中有哪些方法及其作用吗?

一.引言二.Object方法详解1.1.registerNatives()1.2.getClass()1.2.1.反射三种方式:1.3.hashCode()1.4.equals()1.4.clone()1.5.toString()1.6.wait()/ wait(long)/ waite(long,int)1.7.notify()/notifyAll()1.8.finalize()1.8.1.对象在内存中的状态1.8.2.垃圾回收机制1.8.3.强制垃圾回收三.总结 一.引言 Object是ja

[转]JNI:使用RegisterNatives方法传递和使用Java自定义类

JNI:使用RegisterNatives方法传递和使用Java自定义类 2012-03-04 13:30:22|  分类: Java |  标签:jni:registernatives  |举报|字号 订阅 转载地址:http://techbook.blog.163.com/blog/static/304885102012235613945/ 除了使用传统方法实现JNI外,也可以使用RegisterNatives实现JNI.和传统方法相比,使用RegisterNatives的好处有三点:1.C

实现JNI的另一种方法:使用RegisterNatives方法传递和使用Java自定义类 (转)

原帖地址:http://blog.csdn.net/qiuxiaolong007/article/details/7860610 除了使用传统方法实现JNI外,也可以使用RegisterNatives实现JNI.和传统方法相比,使用RegisterNatives的好处有三点: 1.C++中函数命名自由,不必像javah自动生成的函数声明那样,拘泥特定的命名方式: 2.效率高.传统方式下,Java类call本地函数时,通常是依靠VM去动态寻找.so中的本地函数(因此它们才需要特定规则的命名格式),

JAVA中toString方法的作用

因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法 回答补充: 写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用 例子1: public class Orc { public st

java克隆对象clone()的使用方法和作用

转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本地副本.这也是本地副本最常见的一种用途.若决定制作一个本地副本.仅仅需简单地使用clone()方法就可以.Clone是"克隆"的意思,即制作全然一模一样的副本.这种方法在基础类Object中定义成"protected"(受保护)模式. 但在希望克隆的不论什么衍生类中,必

C#中system.object的函数方法功能介绍-转载

C#中system.object的函数方法功能介绍 在C#中,Object类型是所有类型的根,大家平常开发中都要跟它打交道,但不见得对它里面的每个方法都知根知底,下面对它里面的每个方法都进行仔细的总结. 概述: 构造函数 Equals函数 Finalize函数 GetHashCode函数 GetType()函数 ReferenceEquals函数 MemberWiseClone()函数 ToString()函数 Object类型中一共有8个方法,重载的方法没有算进来.下面一一来看看这些方法. 1

JAVA中String类的intern()方法的作用

一般我们平时很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [java] view plaincopyprint? public static void main(String[] args) throws Exception { String a =  "b" ; String b =  "b" ; System.out.print( a == b); String c = "d" ;

hashCode方法的作用

首先hashcode ()方法的作用是返回对象的哈希码值. public int hashCode() @Overridepublic int hashCode() { int result = getUserid().hashCode(); result = 31 * result + getUname().hashCode(); result = 31 * result + getUage().hashCode(); return result;} 返回对象的哈希码值. 支持这种方法是为了散