Java與Python的一些區(qū)別
1.py是1991年問世,java是1995年問世;
2.helloworld代碼區(qū)別:
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模塊設(shè)計(jì),可是人們不太常用;
4.函數(shù)缺省值:
py:
classEmployee():
def__init__(self,name,gender="male",maritalStatus="single"):
self.name=name
self.gender=gender
self.maritalStatus=maritalStatus
self和java里的this差不多,而self必須作為參數(shù),py代碼縮進(jìn)用的空格,容易出錯(cuò);
5.變量類型:
py:是動(dòng)態(tài)語言,變量類型統(tǒng)一用var表示
var=3
var="helloworld"
java:是靜態(tài)語言,變量類型有區(qū)別;
6.實(shí)現(xiàn)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())
優(yōu)點(diǎn):這個(gè)Duck和Person并沒有實(shí)現(xiàn)共同的接口或者繼承相同的類,但是照樣可以作為參數(shù)傳遞給in_the_forest函數(shù),這個(gè)特性寫起代碼來非常爽快。
缺點(diǎn):1)寫起來很爽,讀起來就不爽了,別人看到了in_the_forest這個(gè)函數(shù),他知道參數(shù)x的類型是什么嗎?是Person?是Bird?還是別的類?
2)如果重構(gòu)一下Person函數(shù)的help方法,比如改成sos(self),py的IDE能安全地重構(gòu)嗎?恐怕是不容易吧?假設(shè)人肉重構(gòu)改錯(cuò)了,py也只能在運(yùn)行時(shí)發(fā)現(xiàn)錯(cuò)誤了!
java:
由于自己是靜態(tài)類型,變量類型在編譯期就能確定,IDE那強(qiáng)大的智能感知功能,自動(dòng)安全重構(gòu)的功能一直是引以為傲的賣點(diǎn)。
7.AOP:是對(duì)現(xiàn)有代碼做增強(qiáng),動(dòng)態(tài)的添加一些安全、日志、事物等‘切面’功能。
java:
java類一旦被裝載就無法修改,那是怎么實(shí)現(xiàn)動(dòng)態(tài)添加的呢?
答:我們可以在運(yùn)行時(shí)生成新的類啊,讓新生成的類繼承老的類,或者和老的類實(shí)現(xiàn)同樣的接口,比如ASM這樣的工具,可以操作字節(jié)碼去創(chuàng)建新的類,織入那些‘切面’代碼,這種工作如此精巧,讓人嘆為觀止。
py:
我們是動(dòng)態(tài)語言,可以在運(yùn)行時(shí)對(duì)一個(gè)類進(jìn)行增強(qiáng):添加方法,替換方法,根本不用操作那么Low的字節(jié)碼,我給你舉個(gè)簡(jiǎn)單的例子:
classOrder:
defsave(self):
print("saveorder")
#把老的方法引用保存起來
old_save=Order.save
#定義一個(gè)新方法,該新方法調(diào)用老方法
#并在方法前后加上了日志
defsave_with_logging(self):
print("loggingstart")
old_save(self)
print("loggingend")
#把新方法賦值給Order類的save方法
Order.save=save_with_logging
#測(cè)試
t=Order()
t.save()
輸出:
loggingstart
saveorder
loggingend
Python想實(shí)現(xiàn)AOP,還可以使用裝飾器,Metaclass等很多方式,總得來說py的函數(shù)就是一個(gè)對(duì)象;
————————————————
版權(quán)聲明:本文為CSDN博主「mhyunyun」的原創(chuàng)文章,遵循CC4.0BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/a214704/java/article/details/81275952