国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

J2me的基本概念

2019-11-18 16:04:11
字體:
供稿:網(wǎng)友

  本文主要介紹J2me的基本概念。因?yàn)樽⒁獾絿?guó)內(nèi)的java站點(diǎn)介紹J2me的還比較少,所以就寫了本文。如果有什么不妥的地方,歡迎您email我,討論商榷。
如您要轉(zhuǎn)貼,請(qǐng)保留原出處,并勿做刪改。謝謝。

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

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

3.j2me的基本結(jié)構(gòu)
j2me把設(shè)備分為兩類,一種是聯(lián)接設(shè)備( connected device),一種是有限聯(lián)接設(shè)備(Connected, Limited Device)。前一種對(duì)應(yīng)于那些有電源的,電力充裕,較大的設(shè)備。例如:電視機(jī),冰箱等,后一種對(duì)應(yīng)于主要使用電池,小型的設(shè)備,例如:手機(jī),pda等。這里我只涉及第二種,有限聯(lián)接設(shè)備(Connected, Limited Device)。

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

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

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


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

MyApp.class

┌──────┐
│preverifier │┈預(yù)審核器
└──────┘

MyApp.class

↓download...
┌────────┒
│ ┠┄┄KVM運(yùn)行環(huán)境
│┌──────┐┃ (目標(biāo)設(shè)備)
││ verifier │┃
│└──────┘┃
│ ┃
│┌──────┐┃
││ │┃
││interpreter │┃
││ │┃
│└──────┘┃
┕━━━━━━━━┛
圖2 CLDC/KVM中類文件的審核過程
請(qǐng)注意CLDC中的預(yù)審核(preverification)過程。這是CLDC區(qū)別于通常的類文件審核過程的關(guān)鍵。如上圖所示,當(dāng)源程序被編譯后,必須被預(yù)審核器預(yù)審核,然后才能被下載到目標(biāo)設(shè)備上去。之所以有這一步驟,主要是為了減輕KVM中審核器的負(fù)擔(dān),加快審核速度。就像我前文提到的,這是出于對(duì)CLDC支持的硬件的考慮(畢竟手機(jī)和PDA并沒有我們PC機(jī)那樣奔騰的“芯”呀!^-^)。這里記住這個(gè)概念就行了。具體的操作方法我會(huì)在以后講述編寫MIDlet程序時(shí)介紹。
類文件格式
sun要求通過Jar(compressed Java Archive)給Java應(yīng)用程序打包,這里也不例外。所以如果你想把你的MIDlet程序下載到設(shè)備上運(yùn)行,你就得先用jar打包。具體的操作方法我會(huì)在以后講述編寫MIDlet程序時(shí)介紹。
CLDC的類庫
如果不嚴(yán)格的說,CLDC的類庫是J2SE的一個(gè)小的子集,有以下這種近似關(guān)系成立,即J2SE包含CDC包含CLDC。但要注意CLDC并未完全包含于J2SE,它還包括一 些專門針對(duì)無線設(shè)施的類。所以可以把CLDC的類庫簡(jiǎn)要?jiǎng)澐譃閮刹糠郑簭腏2SE繼承的類和CLDC專有的類。
(1)從J2SE繼承的類
這部分包括三個(gè)package,即java.lang,java.util和java.io。注意即使這些從J2SE繼承的的類,也是大大“縮了水”的。例如java.util的類與接口由J2SE的47個(gè)縮減到10個(gè)。另外兩個(gè)也有相應(yīng)縮減。
系統(tǒng)類
From java.lang:
Object, Class, Runtime, System, Thread, Runnable,
String, StringBuffer, Throwable
數(shù)據(jù)類型類
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
日期與時(shí)間類
From java.util:
Calendar, Date, TimeZone
附加的實(shí)用類
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
錯(cuò)誤類
From java.lang:
Error, VirtualMachineError, OutOfMemoryError
(2)CLDC專有的類
這里sun提供了javax.microedition.io包。用它來提供與外界溝通的橋梁。(注:就像在J2SE中我們利用java.net.*)注意,所有的連接都由javax.microedition.Connector創(chuàng)建。例如:你可以打開一個(gè)http連接通過 Connector.open("http://www.chinajavaworld.com")
javax.microedition.io的接口包括:
Connection, InputConnection, OutputConnection,
StreamConnection, ContentConnection, DatagramConnection,
StreamConnectionNotifier
這里再說明一點(diǎn),實(shí)際上你也可以看出,CLDC所包括的類庫,并不足以開發(fā)應(yīng)用程序。例如,沒有UI界面的支持等。這也正是CLDC的設(shè)計(jì)理念。CLDC本身就從未想過要解決所有的問題。這些問題要靠其上層的Profile-MIDP來解決。例如javax.microedition.lcdui就是定義在MIDP中的UI包。


計(jì)算機(jī)世界開發(fā)者俱樂部 http://www.dev-club.com

(出處:http://www.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 图们市| 缙云县| 蒙城县| 沁水县| 顺义区| 赣榆县| 宽甸| 铜山县| 平武县| 页游| 寿阳县| 安溪县| 内乡县| 淮安市| 慈溪市| 盐城市| 永寿县| 高雄县| 荔波县| 长葛市| 阳城县| 濉溪县| 佛坪县| 福建省| 哈巴河县| 灵川县| 家居| 蒙城县| 凌源市| 阿鲁科尔沁旗| 大邑县| 永嘉县| 汤原县| 清苑县| 卫辉市| 涿鹿县| 中方县| 子长县| 军事| 施甸县| 贡嘎县|