python胶水-Python的JAVA胶水——jpype

Python的JAVA胶水——jpype

python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,jpype就是在Python中使用jvm的第三方库

文档在这里

安装

sudo pip jpype1 #注意后面有一个1,参考官网

配置安装JAVA环境本文就不再赘述

helloworld

设置参数启动JAVA虚拟机

运行JAVA代码

关闭虚拟机

#coding=utf=8

import jpype

jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径

jpype.startJVM(jvmpath=jvmPath) # 启动虚拟机

# 执行JAVA代码

jpype.java.lang.System.out.println("hello world")

jpype.shutdownJVM() # 关闭jvm

-------------------------------------------

hello world

JVM activity report :

classes loaded : 31

JVM has been shutdown

使用Java中的对象

jpype还支持直接使用编译后的class文件,省去了编译这一环节。

一下是原来的JAVA测试代码

package com;

public class JavaClass

{

String value;

public JavaClass(String value)

{

this.value = value+" Java";

}

public String getValue()

{

return this.value;

}

public void say()

{

System.out.println("hello java");

}

public static void main(String[] args) {

System.out.println("hello world");

}

}

编译后产生JAVA字节码

java -cp com com.JavaClass

现在的文件结构如下

./

├── com

│ └── JavaClass.class

└── testJava.py

Python代码如下:

#coding=utf=8

import jpype

jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径

# 启动虚拟机

if not jpype.isJVMStarted():

jpype.startJVM(jvm=jvmPath)

# 使用JAVA字节码中定义的类

javaClass = jpype.JClass("com.JavaClass")

# 实例化对象

javaInstance = javaClass("test")

#调用JAVA对象的方法

print javaInstance.getValue()

javaInstance.say()

# 关闭jvm

jpype.shutdownJVM()

-------------------------------------------

test Java

hello java

JVM activity report :

classes loaded : 20

JVM has been shutdown

添加jar包

原TestApi.java代码

package test;

public class TestApi

{

public String getData(String key){

return key;

}

public void printData(String key){

System.out.println(key);

}

public static void main(String[] args)

{

System.out.println(123);

}

}

打包成jar后可以使用Python来调用

#coding=utf-8

import jpype

jvmPath = jpype.getDefaultJVMPath()

# 用来添加JAVA虚拟机命令行参数

ext_classpath = "./TestApi.jar"

jvmArg = "-Djava.class.path=" + ext_classpath

if not jpype.isJVMStarted():

jpype.startJVM(jvmPath, jvmArg)

TA = jpype.JPackage("test").TestApi #这种用法可以简化后面的书写

jd = TA()

jd.printData("1234")

s = jd.getData("a")

print s

system = jpype.java.lang.System #这里也是获得了System

system.out.println("call system method")

jpype.shutdownJVM()

此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式

小结

jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值