1.py是1991年问世,java是1995年问世;
2.helloworld代码区别:
java:
publicclassHello
{
publicstaticvoidmain(String[]args)
{
System.out.println(“HelloWorld!”);
}
}
py:
print(“HelloWorld!”)
3.打开文件代码:
py:
f=open(“c:\\tmp\\Hello.java”,”r”)
print(f.read())
f.close()
java有IO模块设计,可是人们不太常用;
4.函数缺省值:
py:
classEmployee():
def__init__(self,name,gender=”male”,maritalStatus=”single”):
self.name=name
self.gender=gender
self.maritalStatus=maritalStatus
self和java里的this差不多,而self必须作为参数,py代码缩进用的空格,容易出错;
5.变量类型:
py:是动态语言,变量类型统一用var表示
var=3
var=”helloworld”
java:是静态语言,变量类型有区别;
6.实现DuckTyping代码:
py:
classDuck:
defhelp(self):
print(“Quaaaaaack!”)
classPerson:
defhelp(self):
print(“helpme!”)
defin_the_forest(x):
x.help()
in_the_forest(Duck())
in_the_forest(Person())
优点:这个Duck和Person并没有实现共同的接口或者继承相同的类,但是照样可以作为参数传递给in_the_forest函数,这个特性写起代码来非常爽快。
缺点:1)写起来很爽,读起来就不爽了,别人看到了in_the_forest这个函数,他知道参数x的类型是什么吗?是Person?是Bird?还是别的类?
2)如果重构一下Person函数的help方法,比如改成sos(self),py的IDE能安全地重构吗?恐怕是不容易吧?假设人肉重构改错了,py也只能在运行时发现错误了!
java:
由于自己是静态类型,变量类型在编译期就能确定,IDE那强大的智能感知功能,自动安全重构的功能一直是引以为傲的卖点。
7.AOP:是对现有代码做增强,动态的添加一些安全、日志、事物等‘切面’功能。
java:
java类一旦被装载就无法修改,那是怎么实现动态添加的呢?
答:大家可以在运行时生成新的类啊,让新生成的类继承老的类,或者和老的类实现同样的接口,比如ASM这样的工具,可以操作字节码去创建新的类,织入那些‘切面’代码,这种工作如此精巧,让人叹为观止。
py:
大家是动态语言,可以在运行时对一个类进行增强:添加方法,替换方法,根本不用操作那么Low的字节码,偶给你举个简单的例子:
classOrder:
defsave(self):
print(“saveorder”)
#把老的方法引用保存起来
old_save=Order.save
#定义一个新方法,该新方法调用老方法
#并在方法前后加上了日志
defsave_with_logging(self):
print(“loggingstart”)
old_save(self)
print(“loggingend”)
#把新方法赋值给Order类的save方法
Order.save=save_with_logging
#测试
t=Order()
t.save()
输出:
loggingstart
saveorder
loggingend
Python想实现AOP,还可以使用装饰器,Metaclass等很多方式,总得来说py的函数就是一个对象;
————————————————
版权声明:本文为CSDN博主「mhyunyun」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a214704/java/article/details/81275952