C眼看J - 初窥JAVA
?
最近一直在學(xué)習(xí)JAVA,出發(fā)點并不是像當(dāng)初學(xué)C++那樣,而只是想把JAVA作為下學(xué)期參加比賽的工具,帶著這種“浮躁”的心態(tài),使得我總是在想“這個用看么?”、“那個用看么?”。
這是第一次在掌握了一門語言(C++)后學(xué)習(xí)另一門,而這兩門語言又很有可比性。于是我體會到了比較兩門語言異同的樂趣。
C++放蕩不羈,做每一件事都提供多種途徑來完成,不同途徑之間又有所區(qū)別,從而使得語言特性極為豐富。外人看C++書籍,他一定會覺得C++的程序員吝嗇得近乎古怪,多一個拷貝構(gòu)造函數(shù)的代價都不愿意付出,想方設(shè)法地向語言特性要效率,這是因為C++的優(yōu)勢即在于此,如若不善加利用實在是妄用C++啊!JAVA則非常嚴謹,每件事情都只提供不多的做法,而且語法規(guī)則極其工整,這帶來的直接好處就是易學(xué),但是選擇范圍小就意味著程序優(yōu)化的空間不大,當(dāng)然,效率對JAVA來說從來不是主要目標(biāo)。
C++要向后兼容C,因此面向?qū)ο蠛懿患冋?#xff0c;屬于混合型語言,允許全局函數(shù)這樣明顯的過程語言成分的存在,但由于先入為主,C++的不正宗反而讓我覺得JAVA很別扭。JAVA基本可以算是一個純面向?qū)ο蟮恼Z言,非面向?qū)ο蟛糠种皇O禄绢愋?#xff0c;還都提供了外包類用于適應(yīng)對象接口,但是JAVA將main()放在一個隨機(因為放在哪里關(guān)系并不大)的類中這一點讓我比較不喜歡,我覺得這是設(shè)計上的不合理,為什么程序一定要百分之百的由類定義組成呢?既然main()這么特殊為何不把它單獨拿出來呢?不過這也無傷大雅了,只是給人的感覺別別扭扭的。
其實我曾經(jīng)思考過這個問題,究竟人類的思維方式是面向?qū)ο蟮倪€是面向過程的?面向過程的思想就像是:我們接到一個問題后先將其劃分為幾個解決步驟,其中有共性的抽象出來作為函數(shù)可以重復(fù)使用,然后按步驟執(zhí)行。面向?qū)ο蟮乃枷刖拖袷?#xff1a;我們接到一個問題先分析其場景和場景中的要素,將其抽象為類,然后思考為解決這個問題場景中的各個要素分別應(yīng)該承擔(dān)那些任務(wù)或者說具備哪些功能,然后程序員所需要做的就是將這些要素組織起來、協(xié)調(diào)好工作關(guān)系,最后啟動這一工作即可。總的來說,在面向過程的思想中,編程者像是一個獨裁者,一個執(zhí)行者,他對一起都說的算,周圍的一起都像是它的工具――自動化很低的工具,他一一拿起來完成自己心中的計劃;而面向?qū)ο蟮乃枷胫?#xff0c;編程者更像一個組織者,一部電影的導(dǎo)演,他組織劇組里的成員,交代分工和工作時的互相配合,然后在啟動拍攝后退居到幕后,具體工作由手下按照他早已做好的安排來完成。
那么究竟人類的思維方式是怎樣的呢?面向過程還是面向?qū)ο?#xff1f;人們解決問題是更愿意扮演操控者還是組織者?這就是因人而異的問題了,說的玄乎點就是思想境界的問題了。人天生的思維方式肯定是面向過程的,就像“把大象放冰箱分三步”一樣是分step one two three的,但是隨著面對的問題越來越復(fù)雜憑借一己之力越來越難以掌控,人就得學(xué)著放權(quán),學(xué)著合作,學(xué)著組織,這就很自然地過渡到了面向?qū)ο蟮乃枷搿K哉f,我認為人的原始思維方式是面向過程的,面向?qū)ο笏枷胧侨藢栴}復(fù)雜性的一種妥協(xié)。
C++非常注意效率,這是從C繼承的優(yōu)點,但是效率意味著安全性的缺失,所以很多本應(yīng)該高級語言本身做的事情它留給了程序員,很多錯誤對C++編譯器來說只會給出一個警告,需要程序員非常全面了解語言的特性才能完全避免此類錯誤。JAVA則注重安全而忽視效率,據(jù)說早期的JAVA執(zhí)行速度比C/C++要慢上20-100倍!當(dāng)然現(xiàn)在已經(jīng)大幅度提高,但是效率仍然是JAVA的罩門;不過安全性就好多了,JAVA是一門真正的高級語言,高級語言就應(yīng)該離機器遠一些,離人類近一些,JAVA編譯器為程序員默默地做很多事,比如Class類對象的內(nèi)嵌,比如toString()的調(diào)用,等等,一切都是為了給程序員提供方便,幫助程序員了卻一切不應(yīng)理會的煩惱,而只讓其集中精神于用語言解決問題。
C++更像是一個修修補補的作品,它妄圖提供所有人們可能用到的武器,但是人們的需求是隨著時間變化的,所以C++就不斷增加自己的語言特性來適應(yīng)時代,但是由于是20多年前的語言,某些方面實現(xiàn)地頗為踉蹌,比如解決多線程的方案,比如多重繼承。而JAVA更加年輕,在它出生之時就知道自己應(yīng)該具備哪些本領(lǐng)來滿足這個時代,因此它的一些特性看起來要比C++自然得多,比如繼承體系中的Object,比如Thread類,比如接口和內(nèi)部類的配合來實現(xiàn)多重繼承。
這兩門語言產(chǎn)生的背景不同,背負的使命也自然不同。C++來自洪荒,像寶劍,帶著濃烈的英雄主義氣息,應(yīng)該為能力卓群的獨行俠所佩,它更適合被主人用來完成一些惟其才能勝任的任務(wù)――斬妖除魔,而對于一般性的任務(wù),則有殺雞用牛刀之嫌,并無優(yōu)勢可言;JAVA來自現(xiàn)代實驗室,嚴謹而又整齊,像工具箱,渾身散發(fā)著匠人的熟練,不是用來斬妖除魔的,雖能力有限不能殺敵,但是日常生活中林林總總的問題,都可以用它輕易解決,而且上手快好掌握。C++產(chǎn)生的時代,軟件開發(fā)還是一個小眾產(chǎn)業(yè),編程人員更多是和系統(tǒng)啊底層啊之類的概念打交道,所以更注重效率而不注重易用性和接口性。JAVA產(chǎn)生的時代,軟件開發(fā)已經(jīng)成為一個必須要很多人通力合作才能完成的工作,而計算機硬件技術(shù)的進步也讓效率的重要性降低,所以JAVA更注重接口性易用性從而使它的使用者合作起來更容易也就是很自然的事了。
C++和JAVA,無論是語法還是功能都比較接近,兩者的不同點很有意思地體現(xiàn)出了兩者各自的使命。
胡言亂語一通,其實我在C++和JAVA方面都是菜鳥,只是學(xué)習(xí)這兩種語言的機會讓我體會到了很多有意思的事,不記下來實在說不過去,故亂述于此。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的C眼看J - 初窥JAVA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT 事业发展:树立自己的品牌
- 下一篇: 深入Django(1): 通用视图 (g