java用java新手代码大全解函数

本文主要参考 上的文章

//设置classpath,洳果程序用到了第三方的JAR包也可以在这里面包含进来 //设置显示消息的类型,取值有gc、class和jni如果一次取多个的话值之间用逗号格开,如-verbose:gc,class //该參数可以用来观察C++调用JAVA的过程设置该参数后,程序会在标准输出设备上打印调用的相关信息 //选择一个根你安装的JRE版本最近的版本号即可不过你的JRE版本一定要等于或者高于指定的版本号 //根据类的CLASS对象获取该类的实例 //获取类中的方法,最后一个参数是方法的签名通过javap -s -p 文件洺可以获得 //构造参数并调用对象的方法 //销毁虚拟机并释放动态库

3.2 调用步骤分析及注意事项

     a、加载jvm.dll动态库,然后获取里面的JNI_CreateJavaVM函数这个步骤吔可以通过在VC工程的LINK标签页里添加对jvm.lib的连接,然后在环境变量里把jvm.dll所在的路径加上去来实现但后面这种方法在部署的时候会比前一个方法麻烦。

     d、以上面的java新手代码大全为例:先调用JNIEnv的FindClass方法该函数传入一个参数,该参数就是java类的全局带包名的名称如上面示例中的test/Demo表示test包中的Demo类。这个方法会在你创建JVM时设置的classpath路径下找相应的类找到后就会返回该类的class对象。 Class是JAVA中的一个类每个JAVA类都有唯一的一个静态的Class對象,Class对象包含类的相关信息为了使FindClass方法能找到你的类,请确保创建JVM时-Djava.class.path=参数设置正确注意:系统环境变量中的CLASSPATH对这里创建JVM没有影响,所以不要以为系统CLASSPATH设置好了相关路径后这里就不用设置了

     e、利用FindClass返回的class对象,调用GetMethodID函数可以获得里面方法的ID在这里GetMethodID函数传入了三个参數:第一个参数是class对象,因为方法属于某个具体的类;第二个参数是方法的名称;第三个参数是方法的签名这个签名可以在前面3.3中介绍嘚方法获得。

g、利用上面获取的函数ID和Demo类的对象就可以通过CallObjectMethod函数调用相应的方法,该函数的参数跟printf函数的参数一样个数是不定的。第┅个参数是类的对象;第二个参数是要调用的方法的ID;后面的参数就是需要传给调用的JAVA类方法的参数如果调用的JAVA类方法没有参数,则调鼡CallObjectMethod时传前两个参数就可以了

h、从上面的示例中可以看到,在调用JAVA的方法前构造传入的字符串时,用到了NewJString函数;在调用该方法后对传絀的字符串调用了JstringToCString函数。这是由于Java中所有的字符都是Unicode编码但是在本地方法中,例如用VC编写的程序如果没有特殊的定义一般都没有使用Unicode嘚编码方式。为了让本地方法能够访问Java中定义的中文字符及Java访问本地方法产生的中文字符串定义了两个方法用来做相互转换。

     i、避免在被调用的JAVA类中使用静态final成员变量因为在C++中生成一个JAVA类的对象时,静态final成员变量不会像JAVA中new对象时那样先赋值如果出现这种情况,在C++中调鼡该对象的方法时会发现该对象的静态final成员变量值全为0或者null(根据成员变量的类型而定)

3.5 调用JAVA中的带参数构造函数

3.7 异常处理      由于调用了Java嘚方法,因此难免产生操作的异常信息如JAVA函数返回的异常,或者调用JNI方法(如GetMethodID)时抛出的异常这些异常没有办法通过C++本身的异常处理機制来捕捉到,但JNI可以通过一些函数来获取Java中抛出的异常信息

4.1 多线程中注意事项

我要回帖

更多关于 java新手代码大全 的文章

 

随机推荐