有幾個想學J2ME的朋友問過我這個問題。我想這個問題可以有兩個答案。
J2ME是簡單的。
說其簡單,更主要的原因是J2ME開發使用的是Java,離開平台技術范疇(J2SE,J2ME,J2EE),Java語言本身是簡單的,或者說“簡潔”更為強大。比起C++的程序代碼來說,Java Code讓人看起來更舒服,也更直觀。
另一方面,J2ME的SDK十分豐富,配置也非常簡單,如果再借助強大的IDE(如JB和Eclipse,不過在J2ME開發方面,我更傾向於JB),那麼有一定的Java基礎,J2ME上手實在不是難事。
J2ME並不簡單。
更多人說J2ME簡單是因為它“小”,所謂的“小”主要是針對其API少。“兩三個星期就學完了”,有人如是說。但這個見解我實在不敢苟同。其實恰恰因為它提供的API少,才使得J2ME變得比傳統的編程更具挑戰。相對於提供了豐富的API的J2SE和J2EE來說,我們需要“自力更生”的范疇要大的多。僅有的API提供給我們了最最基礎的功能,剩下的就要靠程序員自己去探索。如果你所需要的各種功能都已經被現成的API實現,那麼我們不再需要學習和研究,只要一本API手冊就夠了。
J2ME的第二個難點在於限制大,當然這也是所有基於移動設備的開發所共同面臨的問題。內存的限制,處理速度的限制讓我們不得不拋棄很多美好的東西,為每一行代碼做盡可能的優化,優化再優化,在內存使用和性能之間尋找平衡點..在J2ME中我們不僅要減少對象的創建,即便是對象的引用也要做到能少則少。在這樣的前提下開發出來的優秀的應有、游戲、軟件,可以說比桌面平台上的開發更具備含金量。
第三一個,同樣是移動開發面臨的公共問題:多機型適配難度大。與桌面平台不同,移動設備之間的差異十分巨大,從硬件方面的屏幕分辨率,內存,處理器到底層的KVM實現,到支持J2ME規范的程度,都不盡而同,這使得“一次編譯,到處運行”的承諾在幾乎成為笑柄。然而,無論如何,J2ME仍然是移動領域跨平台的最佳選擇。因為無論是智能手機還是傳統手機,無論采用什麼樣的系統,它們都支持Java,即便需要為多種進行做出更改,其代價也要小得多。同時,也考驗編程人員的設計能力,一款設計良好的程序可以把適配的成本減低到最少。
最後一點問題是:KVM的Bug多,不過這一點Sun公司似乎沒有什麼責任。大家都知道Java的發展分為兩步走:規范和實現。Sun和眾多廠商制定規范,再由各個廠商根據自己的設備進行實現。然而,不知道是不是廠商的設計水平有限,目前很多機型的KVM實現都不能讓人滿意,Bug簡直是多如牛毛,比如最經典的Nokia 6600,真正為它做過開發的人都應該深有體會。這又從另一個方面增加了開發者做多機型適配的難度。這些Bug可以充分考驗編程人員調試能力:)不過隨著時間的推移,相信這一點會得到改進,Nokia也一直在推出S60機型的軟件升級版本以修正這些Bug。不過對於采用封閉式操作系統S40機型,就無法可想了(事實上S40的bug也要少得多)。
綜上,J2ME並不像大多數人想象的那麼“簡單”,或者說,J2ME的入門是簡單的,但如要做到“精通”,還需要掌握各種具有移動開發特色的程序設計、調試技巧,並非一蹴而就之功。