J2ME基础入门教程(转)

news/2024/7/5 1:05:27 标签: java, 嵌入式
如果您曾经到网站上查询有关Java 2 Micro Edition 的资料,十之八九会被一大堆的技术名词搞的一头雾水。什么 KVM ,什么CLDC 、CDC 、MIDP ,后面还冒出了Personal Java 、Embedded Java以及JES 等名词。虽然名为Java 的微小版本,可是它的世界可真是不小,让我们满肚子「见山不是山,见水不是水」的疑惑。的确,在我刚开始接触 Java 2 Micro Edition 的时候,就感觉到这个玩意儿实在越看越让人摸不着头绪。因此在本章中,我舍弃了技术上的细节,希望带大家从宏观的角度来看待 Java 2 Micro Edition 的世界。希望读过本章之后,可以使大家体验「见山是山,见水是水」,一切豁然开朗的感觉。首先,我们必须先对Java 2 Micro Edition 在整个Java 技术之中的定位做个了解。
  
  各种不同版本之Java 程序的开发
  
  如前面所说,各种不同的Java 版本,在其支援的核心类别函式库之完整性以及所支援的 Java 基本型别这两件事情上都有所差异,也就是说,不管您开发的是企业所使用的Java 程序、嵌入式装置上执行的Java 程序、浏览器上执行的Applet ,或是在PC 上执行的应用程序。您都必须在您的电脑上先安装 J2SE ,然后再安装各种版本的核心类别函式库以及额外的扩充类别函式库,如此才能成功地开发各种不同目的的Java 程序。J2SE 所提供的Java 编译器(javac.exe)可以帮助我们编译各种不同平台上的Java 程序,而J2SE 所提供的Java 虚拟机器(java.exe)则可以帮助我们在PC 上先行测试这些程序执行结果的正确与否。另外,Java 编译器并不会帮您检查您的程序是否符合各种平台上所支援的核心类别函式库与 Java 基本型别。举例来说,虽然我们在前面说过,Smart Card 版本并不支援boolean 、byte 以外的Java 基本型别,而且该平台也只支援java.lang.*核心类别,可是当我们在撰写 Smart Card 平台上的程序时,就算在程序码里头用了boolean 或byte 以外的Java 基本型别,或者使用了java.lang.*之外的其他核心类别,编译器仍然可以照常帮您编译出类别档。这个时候大家一定开始产生疑惑 --那么这些程序如果放到Smart Card 上头执行的时候,出了问题怎么办 ? 难道不会造成Smart Card 上的虚拟机器执行时发生错误吗 ? 针对这个可能发生的潜在问题,Sun Microsystems 在各种不同版本的开发套件中,有些会内附检查器 (checker)或者预先审核器 (preverifier),这两个工具可以帮助您在将程序放到目标平台之前先做好检查和预先审核的工作。检查器会帮您找出类别档之中不合目标平台规格的部分,并提醒你这些地方可能无法在目标平台上执行。因此只要有检查器的协助,您大致上可以确定您的程序可以符合目标平台的规定并顺利执行。 Java Card 的开发套件中就附有检查器。
  
  而某些平台的开发套件则附有预先审核器,预先审核器除了做检查器做的工作之外,还有一项额外的工作,就是减轻目标平台上虚拟机器的负担,要解释预先审核器这个额外的工作,在传统的 Java 程序之中,为了安全上的考量,任何进入执行环境的类别档 (不管该类别档是来自本机或是远端机器 ),都必须先经过Byte Code 审核器(Byte code verifier)的验证,以防止程序在传送途中遭到恶意的修改,而使得 Java 程序在执行时对系统有不良影响。经过审核之后,该类别档才能开始被J 虚拟机器所执行。如果这个审核的动作在一般的 PC 上执行,速度倒是还能够接受,可是一旦放到如 Palm 或是手机这些CPU 较慢、记忆体也比较少的机器上面就显得十分吃力了。为了节省宝贵的 CPU 运算时间(既能省电又能够加速程序执行 ),因此,在程序设计师产生能够让某些特定平台执行的类别档之前,程序设计师必须先在 PC 上使用预先审核器做一些前置的审核工作,预先审核器会在类别档之中加入一些特殊标记或符号。如此一来,当这些程序放到目标平台上执行时,就可以大幅减少在目标平台上做审核时的时间,藉而加速程序的的启动及执行速度。因此在J2ME 之下的程序(Spotlet 、MIDlet),其执行步骤变成因为预先审核的关系,执行时Byte Code审核器的工作就变少了,也因此从程序载入到开始执行之间的时间因而缩短。 CLDC标准实作和MIDP 参考实作之中就附有预先审核器。
  
  Java 版本的演进
  
  相信熟悉Java 演进历史的人或多或少都听说过,Java 技术一开始并非就叫做 Java ,而是叫做OAK ,而且最早的时候就是为了嵌入式系统而设计的一项产品。后来因为网际网路的发达,而OAK 的诸多特性刚好又适合用在网路上(例如可移植性、编译后程序码很小),因为商标已被注册的关系,因此 OAK 被改名成Java ,从此因缘际会地成了网路上的闪亮巨星,并随着时间越来越成熟,也慢慢地产生了许多非原本预期中的相关运用。虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
  
  虽然从Java 1.0 发表之后,Java 就被广泛地使用在桌上型应用程序以及Applet 的开发上,但是,从Java 1.1 开始,Java又回到了它一开始的老路--也就是嵌入式系统方面的应用,在当时Sun Microsystems 发表了Embedded Java 与Personal Java(也有人简称为PJava)这两项规格。其中Embedded Java 是为了资源十分有限,而且没有显示设备的嵌入式装置而设计; Personal Java 则是为了在能够与网际网路连线、并拥有显示系统(例如彩色LCD)的消费性电子装置而设计。接着Java 的版本演进到Java2 ,这时为了再明显区分各种Java 的应用,所以分割出了J2EE 、J2SE 、以及 J2ME 三种版本。这三种版本的各种特性我们已经在前面已经详细地描述,在此不再赘述。不过请大家记住,由于 Java 2将Java 的应用区分成三大块,使得 Java 程序语言的发展不会再像Java 1.1时如树枝状般扩散出去,这么一来有助于大家对 Java 各种应用的明了,而不会造成今后越发展下去越不可收拾的混乱局面。额外向大家一提的是,后来Personal Java 发展到1.2 版的时候,也采用了一些Java 2 平台上与安全性有关的设计。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126998/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126998/


http://www.niftyadmin.cn/n/1450259.html

相关文章

display:block; 块级元素。a,span标签设置宽度和高度

display:block;是让对象成为块级元素(比如a,span等) 转化后 可以对a或者span标签进行width和height设置,否则设置不了display有很多对象,具体可以参考http://www.w3school.com.cn/css/pr_class_display.asp一般都是用display:none和display:b…

jquery mysql php_Ajax+jQuery+PHP+MySQL实现无刷新发表评论应用

PS:演示做过特殊处理,不会保存用户提交的数据,只做演示。附件内为完整实例,数据会提交到数据库,并显示在前台。HTML部分首先我们放置一个评论表单和显示评论列表#comments发表评论昵称:评论内容&#xff1a…

Entity Framework 6.1-Code First

Entity Framework 6.1-Code First 原文:Entity Framework 6.1-Code First Code First-代码优先,先创建好领域模型。新建MyDbContext继承DbContext。根据代码自动生成数据库 Code First优点 1.可以自由的创建领域模型,基本不受EF框架的限制。自由的命名。…

python微信框架_WeRoBot 1.1.0,Python 的微信公众号开发框架

WeRoBot 1.1.0 发布了。有以下更新:为 werobot.robot.BaseRoBot 增加 client property 允许在初始化 werobot.robot.BaseRoBot 时传入 Config 。注意如果传入了 config , BaseRoBot 会忽略除 config 与 logger 外的其他所有的参数。 deprecate werobot.r…

uva 10548 - Find the Right Changes(拓展欧几里得)

题目链接:uva 10548 - Find the Right Changes 题目大意:给定A,B,C,求x,y,使得xAyBC,求有多少种解。 解题思路:拓展欧几里得,保证x,y均大于等于0&…

mac下安装redis以及redis扩展-----xampp

第一步:安装基础支持curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gztar -xzvf m4-1.4.13.tar.gzcd m4-1.4.13./configure –prefix/usr/localmakesudo make installcd ..curl -O http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gztar -xzv…

mybatis主键回填mysql_MyBatis 示例-主键回填

测试类:com.yjw.demo.PrimaryKeyTest自增长列数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了实现的方法。StudentMapper.xmluseGeneratedKeys&qu…

python编程求1+2+3+....+100的和_python实现1+2+3+...求和的办法

今天下午上python课的时候,老师留了一个小编程题,求1234...100,然后的就大展身手,写了下面的代码:defsum():print("如果中途想终止,请输入no")for i in range(1000): nstr(input("请输入累加到的数字&a…