学习J2ME已经有几天的时间了,今天我以一个初学者的角度来谈谈如何学习J2ME
记得我第一次看J2ME的书时间是在我要去应聘xxx公司的J2ME开发工程师职位的前一天,那天为了面试的需要我准备了一天的时间,对于一个J2ME的菜鸟都还算上的我可想而之在短短的一天时间能准备成什么样子,我们知道一门语言要入门是得有一个过程的,这个过程至少要有4天的时间,何况面对的大家公认很难的J2ME,有的人编代码编了一辈子也许都没有机会接触到它,记得当时我根据招聘信息上面的要求,强行自己记忆了一些知识点,可是还没有到了面试时忘记得一干二尽,当时恨自己不成钢,幸亏笔记的时候大部分是Java基础知识,J2ME的知识都是些选择题,也许是这些选择题我大部分都选择对了,因为后来听说我的笔试分数还很高哦。
要学习好J2ME Java基础是关键
首先在学习J2ME之前要弄懂的知识:
①Java中包结构的关系
②private、protected、defualt、public在不同的情况下的访问权限
③要真正理解抽象类、抽象方法、继承的含义及其接口的属性的理解
④有一定的模式设计概念:什么是单例设计模式、工程设计模式?
⑤理解线成的正在执行过程(注意:Thread类在J2ME中没有stop()方法)
⑥对输入输出的理解
⑦有察看API的能力
我觉得有了上面的基础后在学习J2ME就可以了,提出⑦条的原因是我在学习Java有几年了还没有这样的能力,不是因为我的英文太差,而是因为我没有下意识的告诉自己去查,在遇到问题时只是养成了google的习惯,希望大家不要走自己路,遇到问题一定先自己查相关的API,不行再想其他的办法,这可是我几天在家的埋头查询(因为当时家没有安装宽带网,只能看API文档)的体会,人的潜能是逼出来的嘛,所以要下意识地给自己施加压力哦。
我们来看J2ME的API
MIDlet类:所有的应用程序都要继承这个类
记得第一次看J2ME的书的时候,没有一本书分析一个J2ME的程序的结构,要是有很好的Java基础看看API就可以搞定――――这里要用到的知识:extends、abstract的真正含义,下面我再好好补充一下:
一个抽象类要是它的子类没有声明是abstract,该自类必须重写父类的抽象方法,这样看看MIDlet类的就知道MIDlet是一个abstract类,所以它的子类要重写它的startApp()、pauseApp()、destroyApp(Boolean unconditional)这三个方法。一个abstract类的默认属性是什么也的弄懂,这可以跟interface结合着来理解。
入门级别的学习之道:
我们在学习一门语言经常的入门例子就是“Hello World”,我们也以在程序运行时在手机屏幕上显示“Hello World”字符为例来作为入门的第一个J2ME程序。代码如下:
import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; public class HelloWorld extends MIDlet { private Display displayable; private TextBox nameTextBox; public HelloWorld() { displayable = Display.getDisplay(this); } protected void startApp() throws MIDletStateChangeException { nameTextBox = new TextBox("", "Hello World", 20, 1); displayable.setCurrent(nameTextBox); } protected void pauseApp() { } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { } }
在看了上面的最简单的HelloWorld程序要弄懂的类:Display、TextBox、MIDlet,通过这个例子要对里面涉及到每个类的具体用法有很清楚的理解,这样的要求在刚学习J2ME的时候肯定会感觉到很类,但这是一个良好的习惯,这样坚持下来在写其他的代码不久就得心应手了。下面再在上面的例子的基础上添加一个退出菜单,只需要让上面的类实现CommandListener接口就行了。
import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Displayable; public class HelloWorld extends MIDlet implements CommandListener { private Display displayable; private TextBox nameTextBox; private Command exitCommand; public HelloWorld() { displayable = Display.getDisplay(this); } protected void startApp() throws MIDletStateChangeException { nameTextBox = new TextBox("", "Hello World", 20, 1); exitCommand = new Command("退出", Command.EXIT, 1); nameTextBox.addCommand(exitCommand); nameTextBox.setCommandListener(this); displayable.setCurrent(nameTextBox); } protected void pauseApp() { } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { } public void commandAction(Command command, Displayable displayable) { if (command == exitCommand) { try { destroyApp(false); } catch (MIDletStateChangeException e) { e.printStackTrace(); } notifyDestroyed(); } } }
通过上面的例子又要查看J2ME的API了,看看CommandListener接口定义的方法,这又涉及到接口的知识了,实现一个接口就必须实现该接口的所有方法,而且访问权限限制修饰符必须是public修饰。