JAVA便於開發,C有很高的性能,各有所長, 但聽說JAVA經完善,理論上可以達或超過C的性能, 但不知道這壹天要到什麽時候才能到來.
我是96年畢業的,正值java剛出,火氣沖天之時。 我當時是壹名C++的狂熱者,有著3年的C++經驗。我想到IT技術前沿的美國,於是滿懷希望來到到了IT精英匯集的地方--矽谷。我想這下總算可以施展我深藏多年的C++才華了吧。但矽谷VB,delphi根本不入流,雖然C++還繼續再用,但是已經是大不如以前了,不過有c++背景的找工作要相對容易些。這裏,程序員們,大小的managers,chargers只對Java感興趣。這裏反微軟的氣氛很濃,也許是Sun,Oracle,IBM,AOL等巨頭公司的大本營在此的緣由吧。呆過壹段時間後,我發現這裏只要是稍大壹點的公司,都在同時在維護著幾套System,要壹勞永逸的解決這些問題,讓這些System無縫的銜接起來,java是最好的不過的解決方案。在這裏,個大巨頭公司們對java幾乎在玩命似的瘋狂:ibm在全球16個java實驗室24小時續以奮戰,扛著“java就是壹切”的大旗, 投入java的錢不比sun的少;intel整裝待發,全力以赴趕制java芯片,以求在java謀得壹席之地; oracle,Sybase,informix,DB2這些王牌數據庫廠商更是紛紛下馬,把java綁定到自己的產品中,提供對java最全面,最直接的支持;Inprise,BEA,Iona,netscape聯盟等壹大批系統集成、支援廠商,也不甘落後,爭先恐後的開發自己的java工具、應用服務軟件,目的只有壹個,讓自己的產品帶上壹個響亮的"J"字;CISCO,3Com,HP,NEC等壹大批網絡設備供應商對embed java表現了濃厚的興趣,壹批又壹批的帶java接口的智能設備相續湧現出來,在這個市場上的競爭異常激烈,誰也不敢怠慢;sun自己就更不用說了,sun創造了java,但java並非sun的專有,來自巨頭們的競爭, 也讓sun感到了前所未有的壓力,在“捍衛java,保衛java,發展java”的方針下,帶領巨頭們發布了面向不同領域的各個版本:面向PC領域的java2 Standard Edition,面向企業級計算的Java 2 Enterprise Edition,面向嵌入式系統的Java2 Embedded Edition, 面向智能終端的Personal Java Edition。在這樣的壹種趨勢下,迫不得已,只有放下我心愛的C++!java本是是壹個開放的體系,各家廠商都可以對她擴展、實現,要維護整個java世界的純潔,他們采用了壹種絕妙的方法,運用java的100%oop特點,對於規範的定義只是壹些接口,而這些接口的實現,則完全由各個廠家去負責,多麽的和諧,多麽的完美!理解不了這些,妳就根本無法理解象EJB,Servlet/JSP,JTA、RMI/IIOP、JNDI,JMS,Jini....這些java新秀的威力,稍大壹點的公司(除了Microsoft),無壹不對她趨之若寵,源源不斷的錢財、人力都願意往這裏扔。這僅僅只是個j2ee,也是到目前為止,業界中最為完美的企業解決方案,就更不用說j2me了,想做下壹代internet接入設備,除了j2me可以說是別無選擇,更要命的是她完全可以與現有系統緊密的銜接起來...... 我要承認在系統、支撐軟件領域,C++還是老大,在應用領域現在是java。辛辛苦苦用C++寫的壹套Solution才買10萬還不到,而java輕松就完成的Solution可以賣到幾百萬,這就是區別;同樣,如果僅僅把java當作applet,application用在桌面環境中,她的的確確又比任何壹種語言都爛。我所說的只是國內的環境影響著我們每壹個人,當java one 2000在美國紅紅火火的舉行,多達4萬家公司擠進會場,更是有3000余名專家、學者在會上慷慨陳辭時,而國內還是不以為然,守著以前的老家當,倒是精明的日本人,早就預定了數十個座位;當個大公司在java的領域裏進行慘烈爭奪的時候,國內還抱著VB,Delphi 枕著C++睡大覺。
C++在遊戲方面具有很大優勢,目前更多的大型3D遊戲是用C++實現的。C是目前效率最高的語言(除了匯編語言)。而JAVA開發相對簡單。較多的說法是VC(C++)執行速度更快,因為VC已經優化的和匯編差不多了,所以懷疑javaSDK解釋器把比較短的代碼做了預處理,執行循環內部就不用調用解釋器,直接執行已經解釋的機器碼,所以速度差不多,不過這只是猜測,也許測試大壹些的程序才能說明問題. java比C++快的說法我以前就聽說了,CSDN上也吵的很厲害.其實java只是種語言,不代表壹種編譯器,執行時先把字節碼直接優化轉換成機器碼,速度確實比壹邊解釋壹邊執行要快,但也不能比說比C++快,因為C++也是壹種語言,不是編譯器.主流的C++/java編譯器效率如何,有足夠證明的實驗結果時再說。
Java就兩個缺點:啟動速度慢(JIT需要壹定時間),內存占用大(虛擬機),其他基本就沒有了。要說執行速度,從最底層看,Java和C++是壹樣的,因為有了JIT,執行的同樣是編譯好的機器碼;稍微往上點就不太壹樣了:壹來編譯器優化不壹樣,更重要的是很多算法的實現良莠不齊,比如Array(C++ STL中叫做Vector),Map等等,我實際測試過,有的快有的慢,C++中更復雜,VC7之後帶的STL明顯比GCC(MinGW)的快得多。最後從實際使用來看,C++其實處於十分尷尬的地位,我以前非常喜歡C++,現在轉向了Java,因為開發企業級軟件,妳用C++簡直就是自尋煩惱,而底層用C++有時候也是自尋煩惱(比如很多嵌入式系統對C++支持是很不完整的),C更加通用,再加上壹個簡單的Lua腳本,C實現機制,Lua實現策略,很方便!
我已經試了壹下,java和c++的運行時間之比是 266:230,當然java的是不包括加載的時間。看來可以安心的用java繼續寫下去了。但是有壹個很奇怪的問題,既然java的速度已經接近c++,網上還有那麽多人用c++作數值計算能?我選java是因為它的安全性,數組在運行時越界了就會報錯,想當初調試c++程序那個痛苦,改為等價的java代碼之後運行就保存,數組越界了。
我最初學習的是Java,後來又學習C++,雖然二者都是面向對象的語言(C++是半面向對象語言),但是在C++的學習過程中,C++“幾乎完全”沒有規則性或者超靈活性的語法讓壹個之前學過JAVA語言的人感到很不爽!Java確實是個很不錯的東西,尤其是其背後有強大的類庫做支撐,用起來感覺那是相當的爽,但速度也確實是個問題。幸好現在的Java語言,其執行方式已經不僅僅是解釋執行方式了,即時編譯器(JITC、just-in-time compiler)技術和原型編譯技術的出現大大提高了JAVA的運行效率。C++靈活無比,但純屬高級玩具或者高深的九陽神功,假如玩不好,就把自己繞進去,如練奇門遁甲壹般走火入魔,如果玩好了,那可就是強大致極啊!Java是在C++的基礎上開發出來的,比C++簡化很多,容易使用很多,但是在有些方面特別是泛型方面明顯沒有C++使用起來靈活。在某些功能上也稍遜於C++,例如對於圖像的剪切等方面的技術。JAVA和C++都是面向對象語言。也就是說,它們都能夠實現面向對象思想(封裝,繼乘,多態)。而由於c++為了照顧大量的C語言使用者,從而兼容了C,使得自身僅僅成為了帶類的C語言,多多少少影響了其面向對象的徹底性!JAVA則是完全的面向對象語言,它句法更清晰,規模更小,更易學。
(1)JAVA的運行速度(JAVA最大的障礙在於速度)解釋過的Java要比C的執行速度慢上約20倍。無論什麽都不能阻止Java語言進行編譯。當時剛剛出現了壹些準實時編譯器,它們能顯著加快速度。當然,我們完全有理由認為會出現適用於更多流行平臺的純固有編譯器,但假若沒有那些編譯器,由於速度的限制,必須有些問題是Java不能解決的。許多企業的應用開發人員非常喜愛Java的語言特性,但是在開發重要系統時,語言特性和執行效率之間的抉擇往往令人傷透腦筋。在關鍵計算中,用戶可能並不在乎數據如何壓縮或者運行的延遲關系如何設置,但是對程序的運行速度卻非常重視,這使廠商將Java的編譯策略開發放在了首位。現在的Java語言,其執行方式已經不僅僅是解釋執行方式了,即時編譯器(JITC、just-in-time compiler)技術和原型編譯技術已經被許多廠家采用,包括Sun、IBM、Oracle以及Netscape等公司在內的技術提供商正在利用這些技術逐步提高Java的執行速度,其中IBM公司早已將Java虛擬機(JVM,JavaVirtual Machine)、操作系統和硬件的特性有機的結合在壹起,非常有效地提高了Java的執行效率。
(2)JAVA所有東西都必須置入壹個類.
Java是完全面向對象的語言,它不再支持C++程序時所使用的過程式的設計方法,所有函數和變量部必須是類的壹部分。除了基本數據類型(例如整型、字符型、布爾型等)之外,其他的數據對Java來說都是對象,包括數組。
對象將數據和方法結合起來,把它們封裝在類中,這樣每個對象都可實現自己的特點和行為。JAVA不存在全局函數或者全局數據。如果想獲得與全局函數等價的功能,可考慮將static方法和static數據置入壹個類裏。而c++允許將函數和變量定義為全局的。此外,Java中取消了c/c++中的結構和聯合、枚舉這壹類的東西,壹切只有“類”(Class),消除了不必要的麻煩。
java是解釋性語言,java程序在運行時類加載器從類路經中加載相關的類,然後java虛擬機讀取該類文件的字節,執行相應操作.而C++編譯的時候將程序編譯成本地機器碼.壹般來說java程序執行速度要比C++慢10-30倍.即使采用just-in-time compiling (讀取類文件字節後,編譯成本地機器碼)技術,速度也要比C++慢好多。
C++和C#,java區別比較大.雖然三者都是面向對象.但C++重算法,Java和.Net重架構.另外Java有開源的支持。三者的應用領域也不壹樣.C++在嵌入式開發,遊戲,老的系統比較多;三門語言學好哪壹個都是可以的,只是選擇語言也包含了方向的選擇;壹般重本是以C或C++作為必修,Java是專業選修,.Net在學校新起還不是很長時間,三本或專科可能會直接教Java或.Net的直接企業應用。有四門都必須學好的:數據結構,常用算法,數據庫原理,網絡,尤其前面兩個。C++能在硬件有所作為,而其他兩種基本上不會被用來做這個。
Java自問世以來,以其得天獨厚的優勢,在IT業界掀起了研究、開發它的浪潮。作為壹種與底層硬件無關的、“編寫壹次,到處運行”的高級語言和計算平臺,Java天生就具有將網絡上的各個平臺連成壹體的能力,真正實現了“網絡就是計算機”的理念。
C++語言的創立者的忠告
C++語言的創立者,斯坦.利普曼(Stan Lippman)在2004年9月17日參加了在北京召開的微軟技術大會並做了演講。利普曼和天極網記者暢談了對“中國程序員的30歲現象”的看法,對C++、NET、面向對象等新技術發表了自己的看法。他說如果妳想做web service,asp等等,c++將不會很適用,因為這個語言不靈活,它太繁復了,它不是為了網絡服務(Web service)而設計的。C#就是為了網絡需求而設計的,.net的理念就是並不是壹種語言能解決所有的問題。它不像Java,迫使妳只能用壹種語言。如果妳在開發的時候發現另壹個工具更好,那麽妳就可以選擇另壹個工具。人們總喜歡讓事物對立起來。如果有了微軟的產品,妳就壹定要有SUN或Linux,因為人們喜歡看他們爭鬥,即使實際上並不會引發任何爭鬥。c++就像壹把沒有把手的刮胡刀,它不可能對所有的事物都適用,就像Visual Basic也不可能對所有人都適用壹樣。有很多人都使用c++,也有很多人使用Visual Basic,我們還需要其他的語言。c++很難,我們必須擁有難的語言,但同時,簡單的工作也需要簡單的語言來解決。實際上,沒有哪種語言能流行10年。對於c++的未來來說,我想它還是會表現的很好。
知道C++很牛,可以直接和底層打交道,且效率不次於c,多牛,還面向對象,再加上這復雜曲線的學習,千萬別說妳不懂C++。很多牛B公司像微軟google什麽的,人家上來就直接問妳C++ 和算法。所以我覺得學不好C++,起碼我永遠和這些牛B的公司沒緣分了。可是最近做了些東西,突然發現C++留給我們什麽呢?我覺得應該就是細節了。就像某人說的,java用的還算可以的人,甚至不需要有堆棧的概念。而C++呢?復雜的語法,龐大的語義,變態的學習曲線,我C++ primer翻了半天越看越覺得自己菜,光什麽地方能用static,什麽地方不能用,就這就把人折騰的夠嗆。前陣子我甚至還搞不清int i;(對比int i=10) 到底是定義還是聲明。這麽龐大的學習曲線,那麽我想問下:諸位妳們的公司現在都用C++做啥呢?
樓上兄弟,使用C++並不代表妳必須弄明白C++的每個知識點,妳完全可以不必理會C++中復雜,晦澀的部分,比如模板(是不必精通,但是還必須有壹定的基礎概念),元編程(這個我也不明白具體是什麽概念,汗顏).只使用妳明白的C++部分,就足夠妳寫出優秀的軟件.我的工作經歷中,曾經維護過壹個5W行的C++代碼,並且偶爾還要維護壹個25W行的C++代碼,在那些代碼中,並沒有使用太過於復雜的概念,打個比方說,在那些程序中,STL也僅用到vector這樣的容器而已。並且內存管理也直接使用原生指針,並沒有使用智能指針等等。那2個程序,都是應用在電信的基礎軟件中,對可靠性和性能要求很高的場合。所以,其實應該客觀的看待C++,它確實很難,概念太多了,但是它並不是強求妳必須弄明白C++所有的知識點後才可以幹活,它許可妳先用妳明白的內容幹活。
C#的發展前景
如果拋開壹切非技術方面的因素,C#無疑是這個星球上有史以來最好的編程語言,它幾乎集中了所有關於軟件開發和軟件工程研究的最新成果。面向對象、類型安全、組件技術、自動內存管理、跨平臺異常處理、版本控制、代碼安全管理……妳不可能在另外的壹種語言中找到所有這些特性。其實在編程語言中真正的霸主多年來壹直是C++,所有的操作系統和絕大多數的商品軟件都是用C++作為主要開發語言的。JAVA的程序員絕大多數也是C++的愛好者,PHP的成功裏面也有類似C++的語法的功勞。在操作系統、設備驅動程序、視頻遊戲等領域,C++在很長的時間內仍將占據主要地位,而在數量最大的應用軟件的開發上,C# 很可能取代C++的位置。首先,C# 和JAVA壹樣,簡直就是照搬了C++的部分語法,因此,對於數量眾多的C++程序員學習起來很容易上手,另外,對於新手來說,比C++要簡單壹些。其次,Windows是目前占壟斷地位的平臺,而開發Windows應用,當然微軟的聲音是不能忽略的。最重要的是,相對於C++,用C# 開發應用軟件可以大大縮短開發周期,同時可以利用原來除用戶界面代碼之外的C++代碼。
但是,C# 也有弱點。首先,在大量的現有Windows平臺上,C# 的程序還不能運行,因為C# 程序需要 .NET運行庫作為基礎,而 .NET運行庫將作為新壹代的Windows(Whistler)的壹部分發行, 或以Service Pack的形式提交給Windows Me 和 Windows 2000用戶。所以在近期,C# 會主要在服務器上得到應用。其次,C# 能夠使用的組件或庫還只有 .NET 運行庫等很少的選擇,沒有豐富的第三方軟件庫可用,這需要有壹個過程,同時各軟件開發商的支持也很重要。第三,JAVA的成功因素裏有壹些是反微軟陣營的吹捧,雖然“只寫壹次,到處運行”只是壹句口號,但畢竟已經是壹種成熟的技術。而C# 的鼓吹者目前只有名聲不佳的微軟,且只能運行在Windows上。實際上這兩種語言都不是不可替代的,理智的說,對軟件開發商而言,什麽用的最熟什麽就是最好的工具。尤其對C++的使用者,C# 沒有帶來任何新東西,因為.NET運行庫在C++中也可以使用,沒有要換的絕對的理由。
綜上所述,我個人認為,近幾年,C# 將不可避免地崛起,在Windows平臺上成為主角,而JAVA將在UNIX、Linux等平臺上成為霸主,C++ 將繼續在系統軟件領域大展拳腳。非常有意思的是,這些語言的語法極其接近,因為JAVA和C# 都是由C++發展而來的。其他的開發工具當然還會在相當長的時間裏繼續他們的旅程,不過在市場份額上,將不可避免地受到沖擊。
.NET 和JAVA發展前景。
開發效率方面:對我們來說選擇開發工具的最需要衡量的就是這壹因素,J2EE這方面非常欠缺,不象.Net擁有很牛的.Net Studio,不過Jbuilder 6已經出來了,支持EJB2.0 也不算太落後,但壹直沒有解決的就是頁面用戶控件,缺乏可視化設計和Servlet應用程序框架生成。我期望的壹種方式是具有象.Net Studio壹樣的可以所見即所得的編輯模板(Template),綁定用戶按鈕事件處理。目前可以通過javascript庫,模板庫及宏庫略微緩解壹下Servlet的開發。ASP .Net和Servlet都支持動態更新表現層。
XML支持能力:.Net壹直叫囂的就是我集成了XML和Web Service,但JDK1.4也搞出了XML規範,這方面已經差不多了,不過.Net的易用性好得很,而且就此壹家,程序員不必費心思選組件或產品。
理解的兩者本質 : Java是綁定於壹種語言的跨系統的平臺,是壹個有多家供應商提供競爭性產品的規範。 .net是綁定於壹種系統的多語言平臺,是壹個規範性較弱的壟斷性產品。隨便問壹個稍有頭腦的Java程序員,Java最大的好處是什麽,他會毫不猶豫地告訴妳:“簡潔”。Java為Internet而生,也為自己“簡單易用並提高生產效率”的理念而活。
站在用戶的立場上:Java對大中小型系統都適用,只要搭配不同的操作系統、應用服務器等等,大到銀行綜合信息系統、全國全省的統壹應用系統,小到手機遊戲,Java可以大小通吃,來者不拒。尤其是中國政府的重要系統,全沒有.net的份,為啥?妳不給我看家底,我怎麽知道妳有沒有留了後門,改天偷偷溜進我家?.net照顧中小型應用毫無問題,而且開發速度快,作為用戶,付了錢很快能看到回報,當然歡喜。大型應用麽,.net是不是真的支撐不了,我不知道,但諸如windows不穩定不安全的評論由來已久,.net建構於這些親戚的基礎上,壞事就脫不了幹系。系統交貨早,功能實現,運行穩定,安全性不出紕漏,用戶就滿意。跨不跨操作系統,這個考量不重要,哪有沒事整天換操作系統的用戶?
站在開發商的立場上:跨平臺對開發商是壹個巨大的誘惑。壹次開發,多個平臺使用,降低了遷移成本,有利。但Java的開發工具沒有.net順手,對編碼人員的要求比.net要高。
站在從業人員的立場上:從業人員被市場所驅動,反過來也引導市場。Java起手的過程比較漫長。Java開發者要做很多DIY工作,才能寫出第壹個像樣的程序。DIY多了,對於從業的基礎素質,必有提高。.net入門快,windows最大的好處“可視化”在.net延續,集成環境好,單步調試強,這是Java團隊中下至程序員上達項目經理歷來羨慕的地方。做慣了windows和.net下的開發,難免覺得Java下的開發調試實在比較原始:代碼大多要壹行壹行寫,單步調試很多時候不可能。.net開發效率差不多是Java的三倍(經驗數據),致命的誘惑。在Java放棄的客戶端程序上,.net是老大,但在服務端,.net還是個小弟弟,有待成長。微軟最初想要構建壹個新的技術來回應J2EE,但發現壹己之力還辦不到。
.NET和Java在中國哪個更有前途:這個問題好象已經不用再爭了.中國90%的用戶是Windows用戶,保護現有投資,使用很習慣很易用不用重新學習,我又不用跨平臺,我幹嗎要換Java 呢.過去是微軟沒有提供很強大的WEB開發解決方案,現在提供了,我幹嗎要用Java.而且. Net比Java出的遲,肯定會吸收Java的優點,彌補Java的缺點.而且微軟的VM肯定和Windows結合的很好,性能不用擔心.我幹嗎用 Java?而且微軟顯然把寶已經壓到了.NET上,妳難道還要在.NET的VM上再加壹層Java的VM?
也有人這麽總結,我不知道準不準確:C++更適合底層的系統級別開發,包括算法、遊戲流程控制。C++的跨平臺通過不同平臺的編譯器支持同樣代碼標準跨平臺,平臺移植需要重新編譯,且每種編譯器對國際標準支持或多或少都不完善。
而JAVA適合應用開發,在企業管理、網絡、數據庫、互聯網、手持設備上應用普遍。JAVA有虛擬機支持,是真正意義的跨平臺。
跨平臺:JAVA同時運行於多個平臺,C++可在多個平臺上設計,C#只在Windows。
應用範圍:JAVA範圍很廣,尤其是大型企業軟件開發;C++用於底層的系統軟件開發,壹般用於中小企業。
效率速度:C++最好,真正控制機器。
容易程度:JAVA,C#較容易,而C++太難了。