我是用VS2008和VS2010開(kāi)發(fā).NET程序,通過(guò)MyEclipse8.5開(kāi)發(fā)JAVA程序,下面從IDE、語(yǔ)言、插件的不同點(diǎn)來(lái)做下簡(jiǎn)單的說(shuō)明。但由于經(jīng)驗(yàn)知識(shí)還有限,本篇文章只能從比較表面的以及自己常用的功能點(diǎn)來(lái)說(shuō)明我所看到的不同點(diǎn)。
IDE的不同點(diǎn):
給我的第一感覺(jué)就是MyEclipse在開(kāi)發(fā)過(guò)程編寫(xiě)查看代碼也非常便利,甚至有很多VS沒(méi)有的功能,下面列舉自己現(xiàn)在遇到的一些不同點(diǎn):
1、MyEclipse沒(méi)有像VS里的#region,#endregion一樣的代碼段區(qū)域,在一個(gè)方法或類(lèi)里,可以#region 功能點(diǎn)….#endregion這樣把代碼片段折疊起來(lái),MyEclipse除非用其他一些插件才能達(dá)到這個(gè)效果。
2、MyEclipse導(dǎo)入新項(xiàng)目,如果JRE版本不一樣,需要選擇使用本地JRE版本,項(xiàng)目右鍵->Build Path->Configure Build Path->Libraries->Java Build Path里修改JRE版本,但有時(shí)還會(huì)出現(xiàn)編譯問(wèn)題,原因是沒(méi)有選擇編譯的JDK版本,項(xiàng)目右鍵->Build Path->Configure Build Path->Java Compiler里修改Compiler compliance level。對(duì)于VS,高版本代碼打開(kāi)低版本代碼,會(huì)自動(dòng)升級(jí),或者手工選擇在.NET哪個(gè)版本下編譯,會(huì)比較方便。
3、對(duì)于一個(gè)大括號(hào)或小括號(hào)的代碼段,雙擊該符號(hào)后面,則自動(dòng)選中括號(hào)內(nèi)部的代碼段,這個(gè)可以方便查看一個(gè)代碼段,VS沒(méi)有這樣的功能。
4、調(diào)試代碼的時(shí)候,VS就表現(xiàn)出比MyEclipse更強(qiáng)大了,它們都可以在斷點(diǎn)處修改已經(jīng)存在的變量的值,但是VS在監(jiān)控臨時(shí)變量框里輸入變量時(shí)同樣可以智能提示自己寫(xiě)的代碼,而MyEclipse不能自動(dòng)提醒,并且VS可以拖動(dòng)斷點(diǎn)到已經(jīng)運(yùn)行的代碼,這個(gè)功能在調(diào)試問(wèn)題時(shí)是非常強(qiáng)大和有用的,但是MyEclipse不能拖動(dòng)斷點(diǎn)。
5、MyEclipse雙擊代碼編輯框里文件的Tab欄,就可以切換全屏顯示代碼編輯塊和多框顯示,這點(diǎn)比VS更方便一點(diǎn),Package Explorer框的旁邊有個(gè)Link Vith Editor按鈕,可以快速定位文件在包里的位置,這個(gè)也比較方便,但是VS里一個(gè)文件右鍵后可以直接選擇打開(kāi)對(duì)應(yīng)的物理文件目錄,在MyEclipse里沒(méi)有這個(gè)功能。
6、JAVA項(xiàng)目是通過(guò)導(dǎo)入方式打開(kāi),不是通過(guò)像VS里雙擊.sln或.csproj文件就可以打開(kāi)整個(gè)工程。但是打開(kāi)一次過(guò)后,下次再打開(kāi)MyEclipse,它都會(huì)自動(dòng)加載已經(jīng)打開(kāi)過(guò)的項(xiàng)目。而VS是每次只能打開(kāi)一個(gè)解決方案,解決方案里包括不同項(xiàng)目。如果新增了解決方案,下次就需要單獨(dú)打開(kāi)了。
語(yǔ)言的不同點(diǎn):
Java語(yǔ)言和C#語(yǔ)言非常相似,雖然內(nèi)部會(huì)有很多區(qū)別,提供的API也不一樣,但開(kāi)發(fā)一個(gè)具體功能點(diǎn)的思路常用的都差不多,由于對(duì)比較新的技術(shù)和特性開(kāi)發(fā)過(guò)程中接觸不多,我所遇到的不同點(diǎn)包括:
1、JAVA里默認(rèn)修飾符是包內(nèi)可見(jiàn)(對(duì)應(yīng)同一個(gè)文件夾目錄,而不是項(xiàng)目大jar包下)的,protected的變量和方法都是包內(nèi)和子類(lèi)可見(jiàn)的,.NET里是只有自己和子類(lèi)可見(jiàn)。.NET里類(lèi)的默認(rèn)修飾符是Internal,程序集內(nèi)可訪問(wèn)。方法和字段默認(rèn)為private的,和JAVA默認(rèn)包內(nèi)可見(jiàn)不一樣。
2、如果找到一個(gè)JAR包,Java查看新jar包的方法字段描述,需要有單獨(dú)的對(duì)應(yīng)jar包的doc文檔,才能看到接口調(diào)用參數(shù)說(shuō)明,否則看起來(lái)不直觀,但是如果有源碼打出來(lái)的jar包,調(diào)試的時(shí)候可以方便的看到該包的源代碼。.NET里只要有了dll文件,就能方便的看到方法元數(shù)據(jù)調(diào)用參數(shù),但是看到參數(shù)詳細(xì)說(shuō)明,還是需要對(duì)應(yīng)dll的xml文檔。
3、Byte類(lèi)型的數(shù)字范圍不一樣,Java里是-128到127,.NET是0-255,一般需要互相交換數(shù)據(jù)和處理都是轉(zhuǎn)換成16進(jìn)制,然后取8bit的后2個(gè)bit,這樣它們的值都是一樣的,方便同步加密解密或相關(guān)處理
4、JAVA里文件保存后默認(rèn)自動(dòng)編譯,但是這個(gè)也得益于它把每個(gè)java文件編譯成一個(gè)class文件,.NET里需要單獨(dú)每次執(zhí)行編譯項(xiàng)目,因?yàn)樗粋€(gè)項(xiàng)目一個(gè)dll文件,如果保存其中一個(gè).cs文件都執(zhí)行編譯,則工作量太大影響開(kāi)發(fā)速度。
5、Java里的Final關(guān)鍵字,當(dāng)給一個(gè)字段時(shí),表示該字段不能修改,構(gòu)造函數(shù)里都不能修改,這個(gè)和C#的const有點(diǎn)像,但是const默認(rèn)是static的。和C#的readonly也比較像,但是readonly可以在構(gòu)造函數(shù)里修改。當(dāng)它作為一個(gè)方法的修飾符時(shí),它類(lèi)試c#的sealed類(lèi),不能重寫(xiě)它。
6、Java包的名字是和物理文件位置一一對(duì)應(yīng)的,C#里命名空間可以隨便寫(xiě),并且編譯出來(lái)的程序集也可以隨便更改,可以不和命名空間保持一致,程序集和JAVA里單獨(dú)打出來(lái)的jar包是差不多的意思。
7、Java里推薦用get,set方法來(lái)對(duì)內(nèi)部變量賦值和獲取值,.NET里可以用字段get,set獲取,并且vs2008后可以直接get;set;的方式,借助語(yǔ)法糖,編譯器后會(huì)自動(dòng)生成等價(jià)的get,set內(nèi)部字段。
插件的不同點(diǎn):
1、MyEclipse自身就是一個(gè)插件,里面集成了大量開(kāi)源框架,而VS是微軟一個(gè)大一統(tǒng)的IDE,要用其他開(kāi)源插件,需要單獨(dú)下載和單獨(dú)配置。
2、Java里實(shí)現(xiàn)webservice的方法很多,除了javax.jws包里只有的JAX-WS,java webservice規(guī)范自帶版本,還有axis,xfire的webservice開(kāi)源實(shí)現(xiàn),axis包括axis1,axis2,xfire已更名為cxf了,但是各種實(shí)現(xiàn)方法各異,在和.NET發(fā)布的webservice互相調(diào)用時(shí),經(jīng)常遇到一些問(wèn)題,總體來(lái)說(shuō)Java對(duì)wsdl的格式要求更嚴(yán)格。
上面都是自己最近開(kāi)發(fā)過(guò)程中根據(jù)自己遇到的問(wèn)題分析和整理的結(jié)果,涉及的面有限,需要自己以后不斷完善相關(guān)技術(shù)點(diǎn),并且整理和理解的結(jié)果也可能不完全準(zhǔn)確,如有問(wèn)題,請(qǐng)指正。