(转载)Jython 简单入门
转载链接:http://willzh.iteye.com/blog/307222
1. 用Jython调用Java类库
第一步、创建Java类
写一个简单的Java类,用Point来示例:
import org.python.core.*; public class Point extends PyObject
{
private int x;
private int y; public Point()
{
x = 0;
y = 0;
} 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 = Point(2,3)
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):
return self.r**2*3.1415 if __name__ == "__main__":
p = Point(2,3)
p.dump()
c = Circle(2,10,3) # 但是实际上这里有问题,我不知道怎么回事,还在研究中……哪位指点下
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.set("a", new PyInteger(42));
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 x:
$
3. 直接在Jython中使用Java内部的类库
如果你不介意,当然可以在Jython中交互执行Java的类库。下面是一个有点“实用”的例子:
$ jython
Jython 2.2.1 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()
>>> while c!=-1:
sys.stdout.write(chr(c))
c = input.read()
安装好的Demo里有些例子也可以参考,例如:
from java.applet import Applet
import sys class HelloWorld(Applet):
def paint(self, g):
g.drawString("Hello from Jython %s!" % sys.version, 20, 30) 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的好处和作用显而易见了吧。
(转载)Jython 简单入门的更多相关文章
- 【转】Jython简单入门
1. 用Jython调用Java类库 第一步.创建Java类 写一个简单的Java类,用Point来示例: import org.python.core.*; public class Point e ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...
- Web Service简单入门示例
Web Service简单入门示例 我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...
- Java的多线程 简单入门
Java的多线程 简单入门 首先能够先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序仅仅是一组指令的有序集合.它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次 ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
随机推荐
- Longest Substring Without Repeating Characters2015年6月9日
Given a string, find the length of the longest substring without repeating characters. For example, ...
- MySql学习笔记(一) —— 关键字的使用
1.distinct关键字 作用:检索出有不同值的列,比如一个商品表中存在供应商vend_id,一个供应商会对应很多商品,我们要查找有多少供应商,就可以用到该关键字去重. select distinc ...
- 【Netty】codec框架
一.前言 前面已经学习完了Netty框架中的主要组件,接着学习codec框架. 二.codec框架 每个网络应用程序必须定义如何将在对等体之间传输的原始字节解析并转换为目标程序的数据格式,这种转换逻辑 ...
- laravel实现多数据库连接配置
只需三步,便可实现. 第一步,在.env文件中配置 DB_HOST=localhost DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=root DB_HO ...
- Tomcat 连接池详解
(转) JDBC 连接池 org.apache.tomcat.jdbc.pool 是Apache-Commons DBCP连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Co ...
- PHP接口学习
接口:不同类的共同行为进行定义,然后在不同类中实现不同的功能. 接口的具体语法: 接口是零件可以用多个零件组成一个新东西: 接口本身是抽象的,内部申明的方法也是抽象的: 不用加abstract 一个类 ...
- 总结常见的ES6新语法特性。
前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...
- C# 类型基础(中)
前一篇文章中我们讲到了值类型和引用类型的一些区别,那这篇我们将深入的分析一下到底有什么不一样 先总结一下两者的差别: 黄金法则: 1.引用类型总是被分配到托管堆上. 2.值类型总是分配到它声明的地方: ...
- WireShark网络分析就这么简单 读后感
京东618活动,满200减100,果断入手了这本经典的 WireShark教程
- mysql too many connections 问题
我的处理步骤: 第一步:首次确定你的服务可不可以重启,如果可以重启转第二步,如果不可以重启转第三步,这个主要考虑已经部署到客户现场或者正在使用中的数据库不能重启. 第二步:查找mysql的安装路径,这 ...