一直想寫點東西為我學習J2ME做個總結,今天終于股起勇氣再動筆,同時也為準備學習J2ME的兄弟姐妹起個拋磚引玉的作用,呵呵,希望不讓大家失望。
先從最基本的開始說起吧~
J2ME的全稱是Java2 Platform Micro Edition,其技術架構如下
Optional Package
Profile
Configuration
Optional Package是廠商選擇性實現(xiàn)的,Profile是針對特殊硬件規(guī)定制定的高級API,Configuration則是起定義硬件功能與低級API的作用。
先從最下層的Configuration開始說起,它是J2ME規(guī)定嵌入式設備能夠執(zhí)行Java程序的規(guī)范,J2ME把運算功能有限,電力有限這類的嵌入式設備叫做Connected Limited Device,規(guī)定這些設備如果能執(zhí)行JAVA程序,則必須遵守哪些規(guī)范,而這些規(guī)范就定義在Connected Limited Device Configuration里面,簡稱CLDC,類似有個可連接,資源相對來說無限的設備則被稱為Connected Device,同樣有個CDC規(guī)范。我們平時所使用的手機屬于Connected Limited Device范疇,支持J2ME的手機必須支持支持CLDC規(guī)范。就目前來看 CLDC有1.0和1.1兩種,兩者最大的不同則是后者支持浮點運算,而前者不支持,CDC1.0和CDC1.1的核心類庫(java.lang.*,java.io.*,java.util.*)和J2SE幾乎沒什么區(qū)別,CLDC1.0則差別較大,CLDC1.1相對來說增強了CLDC1.0的功能,最小內(nèi)存數(shù)量也從160K提升到 192K。CLDC加入的支持擴展類庫為有javax.microedition.io.*等。
通過查閱CLDC的類庫文檔
可以得到以下一些信息,為了方便大家做個了解,我把幾個大類做了一下整理:
系統(tǒng)類:
java.lang.Object
java.lang.Class
java.lang.Runtime
java.lang.System
java.lang.Thread
java.lang.Runnable(接口)
java.lang.String
java.lang.StringBuffer
java.lang.Throwable
數(shù)據(jù)類型類:
java.lang.Boolean
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float(從1.1版本開始支持)
java.lang.Double(從1.1版本開始支持)
java.lang.Character
集合容器類:
java.util.Vector
java.util.Stack
java.util.Hashable
java.util.Enumeration(接口)
輸入/輸出類:
java.io.InputStream
java.io.OutputStream
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
java.io.DataInput(接口)
java.io.DataOutput(接口)
java.io.DataOutputSteam
java.io.DataInputStream
java.io.Reader
java.io.Writer
java.io.InputSteamReader
java.io.OutputStreamReader
java.io.PrintStream
日歷和時間類:
java.util.Calendar
java.util.Date
java.util.TimeZone
其他附加類:
java.util.Random
java.lang.Math
錯誤類:
java.lang.Error
java.lang.NoClassDeFoundError(從1.1版本開始支持)
java.lang.OutOfMemoryError
java.lang.VirtualMachineError
異常類:
java.lang.Exception
java.lang.ArithmeticException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayStoreException
java.lang.ClassCastException
java.lang.ClassNotFoundException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.IllegalMonitorStateException
java.lang.IllegalThreadStateException
java.lang.IndexOutOfBoundsException
java.lang.InstantiationException
java.lang.InterruptedException
java.lang.NegativeArraySizeException
java.lang.NullPointerException
java.lang.RuntimeException
java.lang.NumberFormatException
java.lang.SecurityException
java.lang.StringIndexOutOfBoundsException
java.util.EmptyStackException
java.util.EmptyNoSuchElementException
java.io.EOFException
java.io.InterruptedIOException
java.io.IOException
java.io.UnsupportedEncodingException
java.io.UTFDataFormatException
弱引用:(從1.1版本開始支持)
java.lang.ref.Reference
java.lang.ref.WeakReference
以下為CLDC1.1擴展類庫:
javax.microedition.midlet.*
javax.microedition.lcdui.*
javax.microedition..rms.*
javax.microedition..io.*
javax.microedition.lcdui.game.*
javax.microedition.pki.*
javax.microedition..media.*
javax.microedition.media.control.*
下面來說說Profile,既然Profile構建在Configuration之上,其所規(guī)范的配備需求自然不會比Configuration低,而我們通常所提到的Profile有Mobile Information Device Profile(簡稱MIDP),針對的是手機和尋呼機,等移動設備。還有一種常見的Profile,Information Module Profile,是針對沒有屏幕的移動設備所設計的。
目前MIDP,最高的規(guī)格是2.0,硬件要求為:
內(nèi)存:256Kb非易失性內(nèi)存可供MIDP組件使用,8Kb非易失性內(nèi)存可工應用程序創(chuàng)建持久化數(shù)據(jù),128Kb易失性內(nèi)存可供虛擬機運行時環(huán)境使用。
顯示:屏幕大小96*54,顯示深度:1位,象素形狀(長寬比):1:1。
輸入:單手鍵盤或者雙手鍵盤或者觸摸屏。
網(wǎng)絡:雙向,無線,可以是間歇的,帶寬有限的。
聲音:播放不同聲調的能力,可以通過專用硬件也可以通過軟件算法獲得。
J2ME規(guī)范中還定義了廠商可以選擇實現(xiàn)的包,那就是Optional Packages,通常不同的廠商不同的產(chǎn)品會有一些不同的功能,那么制造廠商可以通過Optioanl Packages規(guī)范來為實現(xiàn)某些產(chǎn)品的特殊功能制定相應的API。
那我們通常所說的J2ME開發(fā),大部分其實都是MIDP程序設計,那我們先來看幾個名詞的解釋:
MIDlet:一個可執(zhí)行的應用手機程序的基本單位。
MIDlet Suite:許多MIDlet所構成的集合一般稱做MIDP Application(MIDP應用程序)。
JAR文件(JAR File,.jar文件)
實際是包裹著MIDlet Suite的文件,屬于ZIP壓縮格式。
JAD文件(Descriptor File,.jad文件)
用來描述MIDlet Suite的基本信息的文本文件,它是一個外部文件(不存在于JAR文件內(nèi)部,獨立存在的文件)。
最后要介紹一下應用程序管理器(Java Application Manager),它可是很重要的哦,它負責將MIDlet的執(zhí)行及其生命周期。它是一個用來執(zhí)行J2ME的原生程序。