自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java和.NET開發(fā)過程中的一些不同

開發(fā) 后端
用.NET平臺下的C#語言開發(fā)了比較長一段時間,最近項目開始用JAVA來開發(fā)了,本文通過自己開發(fā)過程中的一些感受說下它們在具體開發(fā)過程的不同點,由于經(jīng)驗知識還有限,本篇文章只能從比較表面的以及自己常用的功能點來說明我所看到的不同點。

用.NET平臺下的C#語言開發(fā)了比較長一段時間,最近項目開始用JAVA來開發(fā)了,本文通過自己開發(fā)過程中的一些感受說下它們在具體開發(fā)過程的不同點,由于經(jīng)驗知識還有限,本篇文章只能從比較表面的以及自己常用的功能點來說明我所看到的不同點。

我是用VS2008和VS2010開發(fā).NET程序,通過MyEclipse8.5開發(fā)JAVA程序,下面從IDE、語言、插件的不同點來做下簡單的說明。

 

IDE的不同點:

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

 

1、一個變量字段選中后,其他用到該字段的背景顏色自動凸顯出來,方便查看有哪些地方用了這個變量,VS2010之前是沒有這個功能的。

2、對于一個大括號或小括號的代碼段,雙擊該符號后面,則自動選中括號內部的代碼段,這個可以方便查看一個代碼段,VS沒有這樣的功能。

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

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

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

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

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

8、調試代碼的時候,VS就表現(xiàn)出比MyEclipse更強大了,它們都可以在斷點處修改已經(jīng)存在的變量的值,但是VS在監(jiān)控臨時變量框里輸入變量時同樣可以智能提示自己寫的代碼,而MyEclipse不能自動提醒,并且VS可以拖動斷點到已經(jīng)運行的代碼,這個功能在調試問題時是非常強大和有用的,但是MyEclipse不能拖動斷點。

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

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

11、JAVA項目是通過導入方式打開,不是通過像VS里雙擊.sln或.csproj文件就可以打開整個工程。但是打開一次過后,下次再打開MyEclipse,它都會自動加載已經(jīng)打開過的項目。而VS是每次只能打開一個解決方案,解決方案里包括不同項目。如果新增了解決方案,下次就需要單獨打開了。

12、MyEclipse導入新項目,如果JRE版本不一樣,需要選擇使用本地JRE版本,項目右鍵->Build Path->Configure Build Path->Libraries->Java Build Path里修改JRE版本,但有時還會出現(xiàn)編譯問題,原因是沒有選擇編譯的JDK版本,項目右鍵->Build Path->Configure Build Path->Java Compiler里修改Compiler compliance level。對于VS,高版本代碼打開低版本代碼,會自動升級,或者手工選擇在.NET哪個版本下編譯,會比較方便。

13、MyEclipse雙擊代碼編輯框里文件的Tab欄,就可以切換全屏顯示代碼編輯塊和多框顯示,這點比VS更方便一點,Package Explorer框的旁邊有個Link Vith Editor按鈕,可以快速定位文件在包里的位置,這個也比較方便,但是VS里一個文件右鍵后可以直接選擇打開對應的物理文件目錄,在MyEclipse里沒有這個功能。

 

 

語言的不同點:

Java語言和C#語言非常相似,雖然內部會有很多區(qū)別,提供的API也不一樣,但開發(fā)一個具體功能點的思路常用的都差不多,由于對比較新的技術和特性開發(fā)過程中接觸不多,我所遇到的不同點包括:

 

1、Java包的名字是和物理文件位置一一對應的, C#里命名空間可以隨便寫,并且編譯出來的程序集也可以隨便更改,可以不和命名空間保持一致,程序集和JAVA里單獨打出來的jar包是差不多的意思。

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

3、如果找到一個JAR包,Java查看新jar包的方法字段描述,需要有單獨的對應jar包的doc文檔,才能看到接口調用參數(shù)說明,否則看起來不直觀,但是如果有源碼打出來的jar包,調試的時候可以方便的看到該包的源代碼。.NET里只要有了dll文件,就能方便的看到方法元數(shù)據(jù)調用參數(shù),但是看到參數(shù)詳細說明,還是需要對應dll的xml文檔。

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

5、Java里的Final關鍵字,當給一個字段時,表示該字段不能修改,構造函數(shù)里都不能修改,這個和C#的const有點像,但是const默認是static的。和C#的readonly也比較像,但是readonly可以在構造函數(shù)里修改。當它作為一個方法的修飾符時,它類試c#的sealed類,不能重寫它。

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

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

8、Java里每個文件只要有Main方法入口,它都可以運行,而.NET里需要項目類型修改為控制臺應用程序,然后有一個Main方法才能作為一個運行的載體。

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

10、Java里推薦用get,set方法來對內部變量賦值和獲取值,.NET里可以用字段get,set獲取,并且vs2008后可以直接get;set;的方式,借助語法糖,編譯器后會自動生成等價的get,set內部字段。

11、JAVA里文件保存后默認自動編譯,但是這個也得益于它把每個java文件編譯成一個class文件,.NET里需要單獨每次執(zhí)行編譯項目,因為它一個項目一個dll文件,如果保存其中一個.cs文件都執(zhí)行編譯,則工作量太大影響開發(fā)速度。

12、Java里List是一個接口,這個對在C#里用慣了List集合的,new List已經(jīng)會報錯了,而且它們的泛型也不一樣,C#是CLR層的泛型支持,JAVA的泛型不是經(jīng)過JVM支持的,因此性能相對沒有提升。

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

http://lawson.cnblogs.com/

插件的不同點:

1、MyEclipse自身就是一個插件,里面集成了大量開源框架,而VS是微軟一個大一統(tǒng)的IDE,要用其他開源插件,需要單獨下載和單獨配置。

2、Java里實現(xiàn)webservice的方法很多,除了javax.jws包里只有的JAX-WS,java webservice規(guī)范自帶版本,還有axis,xfire的webservice開源實現(xiàn),axis包括axis1,axis2,xfire已更名為cxf了,但是各種實現(xiàn)方法各異,在和.NET發(fā)布的webservice互相調用時,經(jīng)常遇到一些問題,總體來說Java對wsdl的格式要求更嚴格。

 

上面都是自己最近開發(fā)過程中根據(jù)自己遇到的問題分析和整理的結果,涉及的面有限,需要自己以后不斷完善相關技術點,并且整理和理解的結果也可能不完全準確,如有問題,請指正。

原文鏈接:http://www.cnblogs.com/Lawson/archive/2012/06/25/2560761.html

責任編輯:林師授 來源: Lawson的博客
相關推薦

2011-01-26 09:40:42

.NET開發(fā)

2010-05-11 19:01:11

Unix系統(tǒng)

2010-03-04 09:54:24

Android開發(fā)

2009-06-17 16:10:37

Java網(wǎng)站優(yōu)勢

2009-06-17 14:33:08

java項目開發(fā)

2019-05-07 10:28:27

2015-09-25 10:02:52

BlocksDelegates開發(fā)

2021-11-15 15:43:28

Windows 11升級微軟

2011-07-06 16:00:28

ASP

2012-05-11 10:11:55

Java游戲維護

2020-07-29 08:03:26

Celery異步項目

2009-11-23 20:39:21

ibmdw敏捷開發(fā)

2015-09-10 09:55:36

移動web開發(fā)問題

2009-06-10 15:36:25

ubuntu netb開發(fā)過程

2024-06-30 19:45:11

2016-12-30 11:10:32

Hadoop開發(fā)JVM

2020-10-23 10:31:59

開發(fā)開源工具開源

2012-11-13 11:27:16

詳細設計

2010-07-05 12:09:10

RationalJazz需求管理

2011-01-04 10:05:45

敏捷開發(fā)
點贊
收藏

51CTO技術棧公眾號