溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java和.NET開(kāi)發(fā)過(guò)程中的不同點(diǎn)有哪些

發(fā)布時(shí)間:2021-10-29 16:18:20 來(lái)源:億速云 閱讀:154 作者:柒染 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)Java和.NET開(kāi)發(fā)過(guò)程中的一些不同,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

用.NET平臺(tái)下的C#語(yǔ)言開(kāi)發(fā)了比較長(zhǎng)一段時(shí)間,最近項(xiàng)目開(kāi)始用JAVA來(lái)開(kāi)發(fā)了,通過(guò)自己開(kāi)發(fā)過(guò)程中的一些感受說(shuō)下它們?cè)诰唧w開(kāi)發(fā)過(guò)程的不同點(diǎn),由于經(jīng)驗(yàn)知識(shí)還有限,只能從比較表面的以及自己常用的功能點(diǎn)來(lái)說(shuō)明我所看到的不同點(diǎn)。

我是用VS2008和VS2010開(kāi)發(fā).NET程序,通過(guò)MyEclipse8.5開(kāi)發(fā)JAVA程序,下面從IDE、語(yǔ)言、插件的不同點(diǎn)來(lái)做下簡(jiǎn)單的說(shuō)明。

IDE的不同點(diǎn):

給我的***感覺(jué)就是MyEclipse在開(kāi)發(fā)過(guò)程編寫查看代碼也非常便利,甚至有很多VS沒(méi)有的功能,下面列舉自己現(xiàn)在遇到的一些不同點(diǎn):

1、一個(gè)變量字段選中后,其他用到該字段的背景顏色自動(dòng)凸顯出來(lái),方便查看有哪些地方用了這個(gè)變量,VS2010之前是沒(méi)有這個(gè)功能的。

2、對(duì)于一個(gè)大括號(hào)或小括號(hào)的代碼段,雙擊該符號(hào)后面,則自動(dòng)選中括號(hào)內(nèi)部的代碼段,這個(gè)可以方便查看一個(gè)代碼段,VS沒(méi)有這樣的功能。

3、MyEclipse沒(méi)有像VS里的#region,#endregion一樣的代碼段區(qū)域,在一個(gè)方法或類里,可以#region 功能點(diǎn)….#endregion這樣把代碼片段折疊起來(lái),MyEclipse除非用其他一些插件才能達(dá)到這個(gè)效果。

4、Ctrl+alt+t和Ctrl+alt+r快捷鍵,這個(gè)快捷鍵在MyEclipse里非常有用,可以分別快速查找工作空間里的type或者resource,可以快速模糊匹配找到文件或某個(gè)類型的文件,而VS沒(méi)有找到這樣的功能。

5、MyEclipse智能提醒默認(rèn)比較簡(jiǎn)單,只要在輸入.后才會(huì)自動(dòng)提醒,可以在window->preferences->Java-Editor->Contenet Assist標(biāo)簽頁(yè)的Auto-Activation框里的Auto activation triggers for Java設(shè)置成.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,這樣設(shè)置后,在MyEclipse里輸入任意字母就能提示了,但是它區(qū)分大小寫,不像VS輸入小寫a也能智能提示大寫A開(kāi)頭的變量類型等。

6、MyEclipse經(jīng)常遇到編碼問(wèn)題,對(duì)于新手非常不便利,它分為文件打開(kāi)亂碼,和提交請(qǐng)求中文內(nèi)容亂碼兩種情況。當(dāng)工作空間包括多個(gè)項(xiàng)目時(shí),有可能一個(gè)項(xiàng)目是用GBK編碼,另外一個(gè)是UTF-8,這樣就會(huì)導(dǎo)致單個(gè)文件亂碼,設(shè)置整個(gè)工程編碼在Window->Preferences->General->Workspace選擇Text file encoding里的Other設(shè)置,為單獨(dú)項(xiàng)目在Project右鍵Properties->Resource選擇Text file encoding里的Other設(shè)置。對(duì)于JSP等提交請(qǐng)求內(nèi)容默認(rèn)編碼是ISO-8859-1,也經(jīng)常導(dǎo)致亂碼,可以在windows->Preferences->general->Content Types里的Text設(shè)置不同文件的編碼。但是VS沒(méi)有這么多亂碼問(wèn)題,對(duì)新手不容易出現(xiàn)亂碼的問(wèn)題。

7、MyEclipse經(jīng)常會(huì)提示內(nèi)存溢出等相關(guān)內(nèi)存問(wèn)題,對(duì)于新手也是比較困惑的事情,往往是內(nèi)存默認(rèn)配置不夠等造成的,修改myeclipse.ini里-vmargs下面的配置參數(shù),比如-Xmx912m表示***分配堆內(nèi)存912M,-XX:MaxPermSize=556m表示***分配非堆內(nèi)存556M,這個(gè)可以讓MyEclipse內(nèi)存可能夠用。但部分內(nèi)存溢出,可能是JVM內(nèi)存占用溢出,就需要單獨(dú)設(shè)置JVM的內(nèi)存參數(shù)了,在window->preferences->Java->Installed JRE里的,選中默認(rèn)JDK,然后選擇Edit,在Default VM Arguments里配置相關(guān)參數(shù)即可。如果跑的程序是WEB程序,可能還需要設(shè)置Tomcat的內(nèi)存設(shè)置,在window->preferences->MyEclipse->Servers->Tomcat,選中對(duì)應(yīng)版本的Tomcat,然后選擇里面的JDK節(jié)點(diǎn),在Optional Java VM arguments里設(shè)置內(nèi)存參數(shù)。相對(duì)來(lái)說(shuō)VS就不會(huì)有這么麻煩的處理了,一般都不用設(shè)置內(nèi)存參數(shù)。

8、調(diào)試代碼的時(shí)候,VS就表現(xiàn)出比MyEclipse更強(qiáng)大了,它們都可以在斷點(diǎn)處修改已經(jīng)存在的變量的值,但是VS在監(jiān)控臨時(shí)變量框里輸入變量時(shí)同樣可以智能提示自己寫的代碼,而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)。

9、默認(rèn)的Ctrl+左鍵點(diǎn)擊,可以快速定位到該字段或類型的定義處, 和F3一樣,但是我覺(jué)得ctrl+左鍵開(kāi)發(fā)過(guò)程中更順手,比VS里默認(rèn)的F12快速定位會(huì)感覺(jué)更便利,而且它集成Spring后,Ctrl+左鍵可以選擇定位到注入接口的子實(shí)現(xiàn)代碼,這樣可以很方便的查看實(shí)現(xiàn)代碼,而VS當(dāng)使用Spring.net集成時(shí),是不提供這個(gè)功能的。

10、MyEclipse里右鍵-source,可以有很多比較方便的功能,比如生成getter,setter和繼承接口父類方法。

11、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)了。

12、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ì)比較方便。

13、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è)功能。

語(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包的名字是和物理文件位置一一對(duì)應(yīng)的, C#里命名空間可以隨便寫,并且編譯出來(lái)的程序集也可以隨便更改,可以不和命名空間保持一致,程序集和JAVA里單獨(dú)打出來(lái)的jar包是差不多的意思。

2、JAVA的一個(gè)文件只能有一個(gè)公共類,而C#可以多個(gè)公共類在一個(gè)文件里。

3、如果找到一個(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文檔。

4、對(duì)于WEB開(kāi)發(fā),JAVA里Filter,Servlet,Listener是很常用的,Java里的Filter可以用.NET里的module來(lái)實(shí)現(xiàn)一些功能,但Filter可以制定作用請(qǐng)求范圍,module是全局控制的;Servlet相當(dāng)于一個(gè)具體的handler,可以對(duì)制定請(qǐng)求進(jìn)行處理,Listerner可以用.NET里的Application_Start里來(lái)完成一些功能,但是JAVA里集成了部分默認(rèn)Listerner,它在WEB應(yīng)用啟動(dòng)的時(shí)候就開(kāi)始執(zhí)行。它們的具體執(zhí)行流程為:WEB啟動(dòng)時(shí),Listener的ContextInitialized方法->所有Filter的Init(不管filter-mapping的值)->所有配置了load-on-startup大于等于0的Servlet的init方法(不管servlet-mapping的值),具體請(qǐng)求為:具體Servlet的init(只執(zhí)行一次)->Filter doFilter(請(qǐng)求配置的filter-mapping的value)->Servlet service; ***網(wǎng)站釋放的執(zhí)行順序?yàn)椋篎ilter destroy-》Listener contextDestroyed。

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í),它類試c#的sealed類,不能重寫它。

6、Java里沒(méi)有靜態(tài)構(gòu)造函數(shù),如果要實(shí)現(xiàn)一些初始化工作,需要用靜態(tài)代碼塊,static{…},里面輸入內(nèi)容即可,C#只有靜態(tài)構(gòu)造函數(shù)的說(shuō)法。

7、JAVA中有常量池概念,是和堆、棧不一樣的區(qū)域,雖然和C#一樣String都有字符串駐留機(jī)制,但是和.NET的又不一樣了。因此java里字符串比較***用equals比較,否則可能出問(wèn)題。比如"a"+"b"字符串在常量池里,如果它們和”ab”比較將相等,但是"a"+b,b是一個(gè)變量,就將放到堆里了,如果還用==”ab”判斷將返回false,所以JAVA里盡量用equals來(lái)判斷字符串,但是.NET里不涉及這個(gè)問(wèn)題,經(jīng)過(guò)計(jì)算的字符串,==的結(jié)果也會(huì)相等。

8、Java里每個(gè)文件只要有Main方法入口,它都可以運(yùn)行,而.NET里需要項(xiàng)目類型修改為控制臺(tái)應(yīng)用程序,然后有一個(gè)Main方法才能作為一個(gè)運(yùn)行的載體。

9、Byte類型的數(shù)字范圍不一樣,Java里是-128到127,.NET是0-255,一般需要互相交換數(shù)據(jù)和處理都是轉(zhuǎn)換成16進(jìn)制,然后取8bit的后2個(gè)bit,這樣它們的值都是一樣的,方便同步加密解密或相關(guān)處理

10、Java里推薦用get,set方法來(lái)對(duì)內(nèi)部變量賦值和獲取值,.NET里可以用字段get,set獲取,并且vs2008后可以直接get;set;的方式,借助語(yǔ)法糖,編譯器后會(huì)自動(dòng)生成等價(jià)的get,set內(nèi)部字段。

11、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ā)速度。

12、Java里L(fēng)ist是一個(gè)接口,這個(gè)對(duì)在C#里用慣了List集合的,new List已經(jīng)會(huì)報(bào)錯(cuò)了,而且它們的泛型也不一樣,C#是CLR層的泛型支持,JAVA的泛型不是經(jīng)過(guò)JVM支持的,因此性能相對(duì)沒(méi)有提升。

13、JAVA里默認(rèn)修飾符是包內(nèi)可見(jiàn)(對(duì)應(yīng)同一個(gè)文件夾目錄,而不是項(xiàng)目大jar包下)的, protected的變量和方法都是包內(nèi)和子類可見(jiàn)的,.NET里是只有自己和子類可見(jiàn)。.NET里類的默認(rèn)修飾符是Internal,程序集內(nèi)可訪問(wèn)。方法和字段默認(rèn)為private的,和JAVA默認(rèn)包內(nèi)可見(jiàn)不一樣。

插件的不同點(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)指正。

以上就是Java和.NET開(kāi)發(fā)過(guò)程中的一些不同,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI