程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2me基本概念

J2me基本概念

編輯:J2ME
首 頁 | 新 聞 | Symbian | Android| Windows Mobile | J2ME | 下載中心 | 游戲策劃 | 招聘與求職 | 購書指南 | 視頻教程 您現在的位置: 開發視界 >> J2ME >> J2ME入門 >> 正文 J2ME基本概念 作者:佚名    文章來源:轉載    更新時間:2007-1-25 11:15:23 245 本文主要介紹J2ME的基本概念。因為注意到國內的Java站點介紹J2ME的還比較少,所以就寫了本文。如果有什麼不妥的地方,歡迎您email我,討論商榷。
如您要轉貼,請保留原出處,並勿做刪改。謝謝。

1.名詞
這裡我列出一些常見的關鍵詞,方便與下文參照.具體解釋見後文.
J2ME(Java2 Platform, Micro Edition)
CLDC(Connected, Limited Device Configuration)
MIDP(Mobile Information Device Profile)
KVM(The K Virtual Machine)

2.背景
隨著無線應用與嵌入式系統的愈來愈受到人們的重視,SUN也推出了J2ME來迎合這一趨勢.(實際上道也不能算是新推出,熟悉Java歷史的人都知道,Java原先本是為了開發消費性電子產品而研制的.誰知,無心插柳柳成蔭,因在網絡應用上的出色表現而流行,以致現在的J2EE、EJB等等,發展地越來越龐大。這次實質是殺了個回馬槍。至於表現如何,還得拭目以待)sun認為,未來的信息設備將比我們今天的更為customizable 和 personal。這一點我們已經可以從手機和pda的流行程度看出。所以為了開發面向這些設備的applications。sun推出了J2ME(Java2 Platform, Micro Edition)。

3.J2ME的基本結構
J2ME把設備分為兩類,一種是聯接設備( connected device),一種是有限聯接設備(Connected, Limited Device)。前一種對應於那些有電源的,電力充裕,較大的設備。例如:電視機,冰箱等,後一種對應於主要使用電池,小型的設備,例如:手機,pda等。這裡我只涉及第二種,有限聯接設備(Connected, Limited Device)。

3.J2ME的基本結構
sun把J2ME分為兩個部分:configuration 和 profile。
configuration包括虛擬機(virtual Machine),核心的類庫與API。configuration層定義一個java虛擬機的特性與java類庫的最小子集。也就是說,configuration層提供了開發人員一個最基礎,最核心的Java平台。就像我前文提到的,j2me把設備分為兩類,一種是聯接 設備(connected device),一種是有限聯接設備(Connected, Limited Device)。對應這兩種設備就有了兩種J2ME configuration。分別為CDC(Connected Device Con-figuration )和CLDC(Connected, Limited Device Configuration)。這裡請注意,CDC使用經典的JavaVM,而CLDC使用的是KVM(The K Virtual Machine)。
注:kvm是sun為使用16/32位RISC/CISC微處理器或控制器,並其可用內存為160kb~512kb 的的設備而開發的。
Profile層也包含一組API,主要針對於特定的某一族系的設備而定義。profile層在特定的configuration層上實現,而我們程序員則負責在特定的profile上編寫應用程序。對於手機,pda等Connected, Limited Device。它們的profile層稱為MIDP(Mobile InformationDevice Profile)。於是MIDP與CLDC合在一起就構成了一個完整的J2ME架構。
順便說一句,對於MIDP上的應用程序sun也有獨特的叫法,它們被稱為MIDlet。你是不是覺得有點眼熟。想想Java中的applet。
┌───────┐┄┄┄┄┄┄┄
│MIDlet │ 應用程序
├───────┤┈┈┈┈┈┈┈
│ MIDP │ proflIE層
├───────┤┄┄┄┄┄┄┄
│J2ME核心API │ configuration層
├───────┤ CLDC
│ KVM │
├───────┤┈┄┄┄┄┄┄
│特定的硬件 │
└───────┘
圖1 J2ME的CLDC&MIDP架構

4。深入理解CLDC
本節的部分內容譯自J2ME White Paper,比較枯燥,但請記住,畢竟,正確的觀念重於一切。
CLDC的目的
·為小型的,且資源有限,Connected Limited的設備定義一個標准的Java平台。
·允許動態的向這些設備發布內容與應用程序。
·方便第三方軟件廠商與開發者向這些設備移植內容與應用程序。
CLDC的范圍
·Java語言與虛擬機的特性
·核心Java類庫(如java.lang.*, Java.util.*)
·輸入/輸出
·對網絡的支持
·對安全性的支持
·對國際化的支持
CLDC不包括的范圍(即由MIDP解決的)
·對應用程序life-cycle的管理(就是指一個應用程序是如何安裝,運行,刪除的)
·UI界面(User Interface)
·Event處理
·高級應用程序模式(這裡指用戶與應用程序的交互)。
CLDC的安全性
低端的基於虛擬機的安全性由下載時對class文件的審核(verification)步驟來保證。(如果你寫過並編譯過MIDlet程序,就會知道這一步是必須的。這裡有一個概念就行了,我會在以後講述如何創建MIDlet程序時,詳細介紹具體的步驟)。
基於應用程序的安全性通過使每個應用程序分別運行在相對獨立的封閉環境中來保證並且處於被保護的系統package中的類不能被應用程序重載(overridded)。
對於Java語言支持的特殊的方面
CLDC總的來說是與Java語言完全兼容的,但需注意以下幾點:
不支持浮點數據類型(即沒有float和double)(這實際上主要是由於CLDC所面向的設備,其硬件因其內存限制或是基於安全性的考慮不支持浮點運算)
不支持類實例(class instance)的終結(finalization),即不存Object.finalize ()方法。(注:finalization指的是java中提供的有別與garbage collection的另外的一種對象清理方法。具體可參看侯捷老師譯的Bruce Eckel的《Thinking in Java 第二版》,可以在www.jjhou.com中下載)
有限的錯誤處理,即大部分Java.lang.Error的子類都未被支持。與此相反,CLDC包括了相當完備的異常(exception)類。
對於Java虛擬機(Java Virtual Machine)支持的特殊的方面
實質上CLDC在其嚴格的內存限制下達到了對Java虛擬機相當程度的兼容性。不過還是有下列不同點。
·不支持浮點數據類型(沒有float和double)
·不支持JNI (the Java Native Interface )
·不支持用戶自定義的Java級的類載入器(class loaders )
·沒有反射(reflection)特性(注:reflection指java通過Java.lang.reflect提供的,可以對類的能力進行分析的功能。常用來對類的結構進行檢查,在JavaBeans上有廣泛運用可參見Gary Cornell的Core Java2 volumeI,II,機工有出中譯本)
·不支持線程組(thread groups)或守護線程(daemon threads)
·不支持類實例(class instance)的終結(finalization)
·沒有弱參考(weak references)(注:weak reference提供了一種解決指向已經被garbage collector清除的對象的方法。在Java2中被介紹。具體請參考Java.lang.ref API文檔,和sun網站上關於Reference Objects和Garbage Collection的文章。)
·有限的錯誤處理(error handling)

4。深入理解CLDC (part II)
本節的部分內容譯自J2ME White Paper,比較枯燥,但請記住,畢竟,正確的觀念重於一切。
類文件審核過程(classfiles Verification)
CLDC要求其下層的虛擬機能夠辨別並拒絕非法的class文件。但由於CLDC本身面向小內存消耗的小型設備這一前提。其類文件檢測機制與J2SE中定義的標准類文件審核機制還有所不同。請注意看下圖:
MyApp.Java


┌───┐
│Javac │┄編譯器
└───┘

MyApp.class

┌──────┐
│preverifIEr │┈預審核器
└──────┘

MyApp.class

↓download...
┌────────┒
│ ┠┄┄KVM運行環境
│┌──────┐┃ (目標設備)
││ verifIEr │┃
│└──────┘┃
│ ┃
│┌──────┐┃
││ │┃
││interpreter │┃
││ │┃
│└──────┘┃
┕━━━━━━━━┛
圖2 CLDC/KVM中類文件的審核過程
請注意CLDC中的預審核(preverification)過程。這是CLDC區別於通常的類文件審核過程的關鍵。如上圖所示,當源程序被編譯後,必須被預審核器預審核,然後才能被下載到目標設備上去。之所以有這一步驟,主要是為了減輕KVM中審核器的負擔,加快審核速度。就像我前文提到的,這是出於對CLDC支持的硬件的考慮(畢竟手機和PDA並沒有我們PC機那樣奔騰的“芯”呀!^-^)。這裡記住這個概念就行了。具體的操作方法我會在以後講述編寫MIDlet程序時介紹。
類文件格式
sun要求通過Jar(compressed Java Archive)給Java應用程序打包,這裡也不例外。所以如果你想把你的MIDlet程序下載到設備上運行,你就得先用jar打包。具體的操作方法我會在以後講述編寫MIDlet程序時介紹。
CLDC的類庫
如果不嚴格的說,CLDC的類庫是J2SE的一個小的子集,有以下這種近似關系成立,即J2SE包含CDC包含CLDC。但要注意CLDC並未完全包含於J2SE,它還包括一 些專門針對無線設施的類。所以可以把CLDC的類庫簡要劃分為兩部分:從J2SE繼承的類和CLDC專有的類。
(1)從J2SE繼承的類
這部分包括三個package,即java.lang,java.util和java.io。注意即使這些從J2SE繼承的的類,也是大大“縮了水”的。例如Java.util的類與接口由J2SE的47個縮減到10個。另外兩個也有相應縮減。
系統類
From Java.lang:
Object, Class, Runtime, System, Thread, Runnable,
String, StringBuffer, Throwable
數據類型類
From Java.lang:
Boolean, Byte, Short, Integer, Long, Character
容器類(container class)
From Java.util:
Vector, Stack, Hashtable, Enumeration
I/O 類
From Java.io:
InputStream, OutputStream, ByteArrayInputStream,
ByteArrayOutputStream, DataInput, DataOutput,
DataInputStream, DataOutputStream, Reader, Writer,
InputStreamReader, OutputStreamWriter, PrintStream
日期與時間類
From Java.util:
Calendar, Date, TimeZone
附加的實用類
java.util.Random, Java.lang.Math
異常類(Exception Classes)
From Java.lang:
Exception, ClassNotFoundException,
IllegalAccessException, InstantiationException,
InterruptedException, RuntimeException,
ArithmeticException, ArrayStoreException,
ClassCastException, IllegalArgumentException,
IllegalThreadStateException, NumberformatException,
IllegalMonitorStateException, IndexOutOfBoundsException,
ArrayIndexOutOfBoundsException,
StringIndexOutOfBoundsException,
NegativeArraySizeException, NullPointerException,
SecurityException
From Java.util:
EmptyStackException, NoSuchElementException
From Java.io:
EOFException, IOException, InterruptedException,
UnsupportedEncodingException, UTFDataformatException
錯誤類
From Java.lang:
Error, VirtualMachineError, OutOfMemoryError
(2)CLDC專有的類
這裡sun提供了javax.microedition.io包。用它來提供與外界溝通的橋梁。(注:就像在J2SE中我們利用Java.Net.*)注意,所有的連接都由javax.microedition.Connector創建。例如:你可以打開一個http連接通過 Connector.open("http://www.chinaJavaworld.com")
Javax.microedition.io的接口包括:
Connection, InputConnection, OutputConnection,
StreamConnection, ContentConnection, DatagramConnection,
StreamConnectionNotifIEr
這裡再說明一點,實際上你也可以看出,CLDC所包括的類庫,並不足以開發應用程序。例如,沒有UI界面的支持等。這也正是CLDC的設計理念。CLDC本身就從未想過要解決所有的問題。這些問題要靠其上層的Profile-MIDP來解決。例如Javax.microedition.lcdui就是定義在MIDP中的UI包。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved