【转】Jython简单入门
1. 用Jython调用Java类库
第一步、创建Java类
写一个简单的Java类,用Point来示例:
- import org.python.core.*;
- public class Point extends PyObject
- {
- private int x;
- private int y;
- public Point()
- {
- ;
- ;
- }
- public Point(int x, int y)
- {
- this.x = x;
- this.y = y;
- }
- public void dump()
- {
- System.out.printf("The position is (%s, %s)\n", x , y);
- }
- }
编译的时候,记得把jython.jar加入类环境中:
- export CLASSPATH=/usr/share/java/jython.jar
- javac Point.java
第二步、简单调用
现在可以编写Jython来调用上面的Java类库了
- #!/usr/bin/env jython
- import Point
- if __name__ == "__main__":
- )
- p.dump()
第三步、扩展
- import Point
- class Circle(Point):
- def __init__(self, x, y, r):
- super(Circle, self).__init__(x, y)
- self.r = r;
- def dump(self):
- super(Circle, self).dump()
- print "This radius of Circle is %s" % self.r
- def area(self):
- *3.1415
- if __name__ == "__main__":
- )
- p.dump()
- ) # 但是实际上这里有问题,我不知道怎么回事,还在研究中……哪位指点下
- c.dump()
虽然测试的时候有问题,但是隐约感觉到了Jython的强大,让我们欢呼一下吧
2. 用Java执行Python代码
在安装好的Demo里有个例子,可以拿出来炫炫
- import org.python.core.PyException;
- import org.python.core.PyInteger;
- import org.python.core.PyObject;
- import org.python.util.PythonInterpreter;
- public class SimpleEmbedded {
- public static void main(String[] args) throws PyException {
- PythonInterpreter interp = new PythonInterpreter();
- interp.exec("import sys");
- interp.exec("print sys");
- ));
- interp.exec("print a");
- interp.exec("x = 2 + 2");
- PyObject x = interp.get("x");
- System.out.println("x: " + x);
- }
- }
结果如下:
- $ javac SimpleEmbedded.java
- $ java SimpleEmbedded
- sys module
- $
3. 直接在Jython中使用Java内部的类库
如果你不介意,当然可以在Jython中交互执行Java的类库。下面是一个有点“实用”的例子:
- $ jython
- on java1.6.0_0
- Type "copyright", "credits" or "license" for more information.
- >>> import sys
- >>> from java.net import URL
- >>> url = URL("http://willzh.iteye.com")
- >>> urlopen = url.openConnection()
- >>> input = urlopen.getInputStream()
- >>> c = input.read()
- :
- sys.stdout.write(chr(c))
- c = input.read()
安装好的Demo里有些例子也可以参考,例如:
- from java.applet import Applet
- import sys
- class HelloWorld(Applet):
- def paint(self, g):
- )
- if __name__ == '__main__':
- import pawt
- pawt.test(HelloWorld())
直接调用就可以了:
- jython HelloJython.py # 假设上面代码的文件名是HelloJython.py
- java org.python.util.jython HelloJython.py # 也可以这样调用
4. 将Python代码编译为Java类
第一步、创建Python类 Goo.py
- import java.lang.Object
- class Goo(java.lang.Object):
- def __init__(self):
- '''''public Goo()'''
- def dump(self):
- '''''@sig public void dump()'''
- print 'goooooo'
注意函数文档中的字符串,public Goo()表示告诉Java这是构造函数。
第二步、创建Java测试类 GooTest.java
- public class GooTest {
- public static void main(String[] args)
- {
- Goo goo = new Goo();
- goo.dump();
- }
- }
第三步、编译
终端下运行如下命令:
- # jythonc Goo.py
- # javac -cp jpywork:$CLASSPATH GooTest.java # 将jpywork路径加入搜索路径中
- # java -cp jpywork:$CLASSPATH GooTest
- goooooo
运行成功!
5. 后记
很多人说,Python比Java开发速度来的要快,但是Java也有Java不可动摇的强大之处,如此结合,想必Jython的好处和作用显而易见了吧。
本文转自:http://willzh.iteye.com/blog/307222
【转】Jython简单入门的更多相关文章
- (转载)Jython 简单入门
转载链接:http://willzh.iteye.com/blog/307222 1. 用Jython调用Java类库 第一步.创建Java类 写一个简单的Java类,用Point来示例: impor ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
随机推荐
- 利用Nginx构建负载均衡server
大家都知道.一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置).而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢 ...
- hihoCoder #1174:拓扑排序·一
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 因为今天上课的老师讲的特别无聊.小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi ...
- iframe属性參数
iframe属性參数 当点击一个子页面的链接时, 怎样将还有一个子页面嵌入到当前iframe中 仅仅要给这个iframe命名就能够了. <iframe width=420 height=330 ...
- Hadoop学习笔记(两)设置单节点集群
本文描写叙述怎样设置一个单一节点的 Hadoop 安装.以便您能够高速运行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 參考官方文档:Hadoo ...
- 初识google多语言通信框架gRPC系列(二)编译gRPC
目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义类之外,还需要 ...
- [网络]_[0基础]_[使用putty备份远程数据]
场景: 1. putty是windows上訪问linux服务的免费client之中的一个.用它来ssh到远程server备份数据是常见的做法(在没做好自己主动备份机制前), 通过putty界面尽管也不 ...
- HDU 1394 Minimum Inversion Number (数据结构-段树)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 开源Math.NET基础数学类库使用(16)C#计算矩阵秩
原文:[原创]开源Math.NET基础数学类库使用(16)C#计算矩阵秩 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4 ...
- MVC过滤器的详细讲解和示范样本
MVC共有4个过滤器:ActionFilter(方法过滤器),ResultFilter(结果过滤器.感觉是不是很好,所以称它为),AuthorizationFilter(授权过滤器).Exceptio ...
- jquery省市区三级联动
jquery省市区三级联动(数据来源国家统计局官网)内附源码下载 很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + ...