已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
手机常见操作系统: iOS 苹果手机android 安卓系统 Moto HTC symbian 塞班 诺基亚WP7 微软MeeGo Bada 三星黑莓手机编程语言:JAVA是手机主流的编程语言Java是一个编程语言系:分成三部分: JavaEE Java企业版,网络程序开发 JavaSE Java标准版,开发桌面应用系统 JavaME Java移动版,移动设备程序开发 Android market 手机程序的开发方式,在电脑上设计,调试程序,一旦程序正确,可以传输到手机上,安装,执行。手机程序用java语言开发,必须用手机程序规定的java语法设计程序。 开发工具:基本工具jdk(javaSE),手机开发包手机运行环境版本可能有区别: J2ME环境(midp cldc) Android-重要的手机开发模式,其编程范围已经不仅仅限于手机应用, 更扩展到了无线互联网领域。MIDP (Mobile Information Device Profile) 移动信息设备导言:是移动设备编程和运行必不可少的条件之一。其中定义了一些手机编程必须的类和包。分成1.0,2.0,2.1版本。CLDC (Connected Limited Device Configuration) 连接受限设备配置,是专为连接受限设备编程准备的程序。作为连接受限设备之一的手机编程当然这部分也必不可少。以上两大部分,在开发环境安装后,一并安装到机器上。手机开发环境:1. java编译环境,因为手机程序(J2ME)首先是一个java程序,所以必须由java编译器编译。2. 手机开发环境,是在java编译环境之上的一个开发环境。如WTK,eclipse等。我们选用WTK环境。但WTK的集成度并不高,它本身不具备编辑源程序的功能,所以只有用其它文本编辑工具编辑源程序,如写字板。并要将写好的手机源程序放在指定位置。如下图:上图说明,我们写的源程序应该放在项目文件夹:C:wtk25apps手机程序演示中的src文件夹中;手机程序中需用到的资源文件(如果需要,如图片)应该放在项目文件夹中的res文件夹中。手机程序中需用到的外部库文件应该放在项目文件夹中的lib文件夹中.按要求将所需文件放在指定位置后,就可以建立(Build)手机程序了。如果程序有错,会在建立中提示,改错后,才会建立程序。下一步就是用模拟器运行(Run)手机程序。手机程序的运行过程如下:编辑源程序(如用写字板输入程序)编译(翻译,在Build环节的前一步,如果有错,返回前一步)预审(在Build中的后一环节,去掉(修改)程序中不适合在手机中运行的内容,这环节自动的)模拟器运行(Run)如果需要在实体机上运行打包项目传至手机安装运行。手机程序的基本结构:手机程序是一个java语言程序,而java语言程序是由类(class)构成。一个类可以是如下结构:class 类名.类体.手机程序中的类必须派生于MIDlet类。也就是说,MIDlet类是由系统准备好的。public class Computer extends MIDletMIDlet在何处?必须由程序中说明:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class Computer extends MIDletimport:导入,当使用系统提供的类时,必须导入这些类。相当于指明这些类所在的位置。import javax.microedition.midlet.MIDlet;/其中的*表示所有类import javax.microedition.lcdui.*;这两行是所有的j2ME程序必须。每一行的/开始的部分是注释。可见,一个手机程序必须扩展于基类MIDlet,且在类中要覆盖(写出它们的函数体,至少时,可以只给出一对)MIDlet类中的startApp、pauseApp、destoryApp三个函数。以上程序运行时没有画面,如果要求在手机上有一些画面,可以如下进行:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;public class Computer extends MIDletDisplay disp;Form form=new Form(简易计算器);public void startApp()disp=Display.getDisplay(this); disp.setCurrent(form);public void pauseApp()public void destroyApp(boolean b)Java编程基础数据类型运算符与表达式程序结构Java 程序有三种结构: 顺序结构 分枝结构(选择结构,判断结构) 循环结构(重复结构)分枝结构由if else 语句实现,if (条件)语句块1else语句块2 这种结构执行过程是:首先求出条件,条件成立执行语句块1而不执行语句块2,条件不成立时,执行语句块2而不执行语句块1;分枝结构中,“条件”指的是一个可以得到逻辑值的表达式。所以关系运算和逻辑运算常常出现在条件部分。在分枝结构的某一个分枝上,还可以写出更低一级的分枝结构,构成嵌套的分枝结构。循环结构:函数: 手机程序是java程序,java由类构成,一个类由若干函数构成。 函数是什么? 数学中的函数:。 程序中的函数:分成两类一类是系统函数:指系统已将函数的算法写成了程序,我们在程序中只需使用(调用)它。使用这类函数,只需要了解函数的一些特征。具体地,了解函数来自何类?参数(自变量)特征(需几个参数,各参数的类型)?函数值特征(类型)。如:正弦函数。 double x=Math.sin(30*Math.PI/180);二类是自定义函数,函数必须由程序员在程序如写出。因为,系统函数不可穷尽所有的应用,所以有些应用必须由程序员自己设计。在程序中设计函数更主要的原因是:将一个庞大的、复杂的程序,化整为零。函数是程序中功能相对独立的部分程序。函数程序设计解决两部分问题:函数的定义,函数的调用。函数的设计:回答如下问题,函数名?参数(自变量)特征?函数值类型?函数体? 函数值类型 函数名(参数表) 函数体 函数值类型 函数名(参数表)函数原型。有了原型就应该明白函数的用法。函数原型设计除了遵守基本的语法之外,主要取决于函数的功能。举例: 求两个整数之较大者。 int getMax(int x, int y)上式中,圆括号中的参数int x, int y,称为形式参数。表现为若干变量的声明。注意不可写成如下形式: int getMax(int x, y)int getMax(int x ; int y) 求三个实数之积。 double mul(double x,double y,double z) 求两个整数的最大公约数 int getMaxFactor(int a, int b ) 求两个整数之较大者。 int getMax(int x, int y)在写函数时,形参部分的变量应当已知数,去设计函数。而参数的具体值,是由函数调用时传入的。函数体是实现函数功能的代码。如:int getMax(int x, int y) int max;if (x=y) max=x;else max=y;一致return max;函数中必须用return语句“返回”函数值,这个值的类型必须与函数值类型一致。 double mul(double x,double y,double z) return x*y*z ;函数的调用:就是使用函数,得到一个结果。如求两整数之较大值:int getMax(int x, int y) int max;if (x=y) max=x;else max=y;一致return max;int x=getMax(34,56);对它的调用: 函数名(实际参数表) getMax(34,26); getMax(a,b); 这种调用常常错写为如下方式: getMax(int a, int b);由于函数是int getMax(int x, int y)声明的,所以,对该函数的一个调用式就可以当一个int值来使用。 getMax(34,56)当一个整数使用。如: int x=getMax(34,56); int x=12+getMax(a,b); Sysytem.out.println(getMax(a,b);因此,总结函数调用方法:形式参数与实际参数应个数相等、类型相容、次序一致,而且要正确使用返回值。例: 判断一个整数x是否是质数。 首先从概念出发:质数是只能被1与其自身整除的整数。 程序中,可以用2-x-1的每个数除x,若有至少一个数能整除x,则x不是质数;若所有的数都不能整除x,则是质数。int x=.,i;for (i=2;ix;i+) if (x%i=0) 不是是扩大问题的范围,输出3-1000之间的所有质数。public class SimplePrime public static void main(String args) for (int x=3; x=1000;x+) if (isPrime(x) System.out.println(x); static boolean isPrime(int x) for (int i=2;ix;i+) if (x%i=0) return false; return true; 类: 类的设计: class 类名 为何要设计类?java程序必须要由类构成。 类是对现实世界中事物的描述。 而对一个事物的描述分成两部分,事物的属性(数据),行为。属性在类中表现为类的成员变量,行为可以由函数来表现。举二例1. 人属性:姓名,年龄,身份证 行为:自我介绍,唱歌Java程序中可以有多个类,变量与函数 都应该隶属于某个类,不能有变量和函数处于类之外的。在类中的变量可以有两种方式出现:一是,在类中,且不在任何函数中,这样的变量称为类的成员变量。而在类中的某函数中定义的变量,叫局部变量。区别在于,局部变量,它的作用范围是它所处的那对 ,而类的成员变量,在整个类的各函数中都起作用。又如,分数类。class Fractorint fz,fm,sign;/sign表示符号,正1,负-1void print() System.out.print(sign=1)?+:-); System.out.println(fz+/+fm); void simplize() int mcf=getMaxCommFactor(); fz=fz/mcf; fm=fm/mcf; int getMaxCommFactor()return 0;282283082类的定义class Person String ID; String name; int age;void setData(String id, String n, int a)ID=id; name=n; age=a;void showMe()System.out.println(“我是”+name+”,今年”+age+“岁”); 使用已定义的类: 在类外部(在另一个类中)使用类。 通过类创建对象。 写成的类只是一个类型,类型并不能表达具体的事物, 它是抽象的。正如:int 表示整数类型,但它不是一个整数,不能 int =5; 只能 int a=5; 用类型创建对象,再为对象提供数据。 类是类型(相当于int) 所以也不能直接描述一个事物。也只能用它创建变量,再用变量描述一个事物。用类创建的变量叫对象。对象在使用之前需经两步:声明对象。 Person p1; (比较int a ;)创建对象。 p1=new Person();(简单变量不创建)对象创建后可以使用,使用方法两种,存取变量,调用函数。调用函数: 对象名.函数名(参数表);存取变量: 对象名.变量名当一个类产生后,其中的各变量应该有确定的值。这可以通过调用相应的函数,或为变量赋值这两途径实现。但,这两种方法都要求在程序中用语句完成(由程序员承担)。可能会产生两种不应该的情况,一是对象创建了但没有提供数据;二是多次提供了数据。解决这两种问题在面向对象的程序设计中提供一种叫构造函数的机制为成员变量传值。构造函数也是类的成员函数,但它必须与类同名,不可定义任何返回值类型。构造函数的作用是构造一个对象,也就是为成员变量提供数据。它是对象创建(new)时,由程序自动调用,而且在对象的整个生存期中仅被调用一次,这样正好解决上述两个错误(一是对象创建了但没有提供数据;二是多次提供了数据)。构造函数可以重载。重载:指在同一个类中可以存在多个同名的函数。普通函数与构造函数都可以重载。重载函数要求各同名函数之间能在参数上区别。即参数的个数和参数的类型应该不同。同类的对象之间可以相互赋值。类成员变量的访问权限。访问权限指该成员能被哪些程序访问。相对于类而言程序分三种,本类中的函数,外部函数,派生类中的函数类的成员(包括类的成员函数和类的成员变量)有四种访问权限。public:公有,这类成员在程序中任何位置都可以访问。private:私有,私有的成员只能在本类中访问。protected: 保护,只能被自身或其派生类访问。友好权限: 在程序中未定义任何权限。它可以被类自身访问,也可以被同一个包中的其他类访问,如写在同一个源程序中的各类就属于同一包。定义成员的访问权限的目的是为了对成员,尤其是成员变量中的数据进行保护。通常类的成员变量可以定义较严格的权限。派生是面向对象程序设计中的又一个特征。它可以从一个已有类产生新类。新类中可以继承旧类中的成员。从而可能以递增的方式编程。class Personclass Student extends Personclass Hbeu_Student extends Studend.public class MyMIDlet extentd MIDlet 手机程序 import javax.microedition.midlet.*;import javax.microedition.lcdui.*; /这两个包是手机程序中必须导入的,程序中会用到这两个包中的一些类。public class MyMIDlet extends MIDlet /手机类必须公有,继承于系 统类MIDlet 类体,改写从MIDlet中继承的函数 MIDlet是一个抽象类。何为抽象类?描述抽象事物的类。比喻:三角形类与形状类。三角形就是具体的类,形状就是抽象类。但某形状就有一定的面积。但形状不具体也无法求面积,所以在形状类中求面积的函数可以定义为抽象函数。abstract double getArea();可见,抽象函数用abstract修饰,且没有函数体。形状类可能是这样:class Shap.abstract double getArea();class Circle extends Shap double r; double getArea()/覆盖基类的抽象函数return r*r*Math.PI;Java中的抽象函数是指没有函数体的函数(因为它无法定义)。至少含有一个抽象函数的类称为抽象类。MIDlet类也是抽象类。Java中规定,如果某类派生于一个抽象类,那派生类中必须覆盖(写出函数体)基类中的抽象函数。也就是说,如果某类派生于一个基类,那么派生类中必须重定义基类的抽象函数,写出函数体。当函数体仍无法定义,可以加空函数体所以,我们的手机程序都必须派生于MIDlet,因此每个手机程序中都必须要重定义:public void startApp()public void pauseApp()public void destroyApp()这样,在概念上正确的手机程序如下:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class MyMIDlet extends MIDletpublic void startApp()public void pauseApp()public void destroyApp(boolean b)这个程序没有定义屏幕类,所以运行时不会有效果。屏幕类 Display在程序必须定义该类的对象。Display disp;声明对象,但并未创建。通过调用Display类中的静态函数getDisplay()函数可以得到一个MIDlet的屏幕。Display对象只代表手机屏幕,类似于一个“相框”,如果相框里没有物体是无法看到相框。然后就可以将一些可显示对象设到相框中。如TextBox,它实际上是一个输入框,也可以显示内容TextBox类的构造函数如下:TextBox(String title, String text,int len,int constr);title标题text正文 constr限制可以输入的符号 len长度,指明能输入到TextBox中的字数。将创建 的TextBox对象设置到Display中,相当于将照片嵌到相框里。import javax.microedition.lcdui.*;public class MyMIDlet extends MIDletDisplay disp;TextBox text=new TextBox(演示,第一个手机程序,20,1);public void startApp()disp=Display.getDisplay(this); disp.setCurrent(text); public void pauseApp()public void destroyApp(boolean b) 在本例中 disp,text 可以定义在startApp函数中,这时它们只是startApp的局部变量,在其他的函数中不能访问的。所以更多的是将它们定义为类的成员变量,成员变量在各函数中都可以访问。该程序可以运行并有一定的效果。 将图片引入手机程序。 各种款式的手机一定支持png格式的图片,不同手机支持的图片格式类型不同。找到图片 ,如xx.png,图片必须置于项目文件夹中的res(resource资源)然后在程序中进行如下编码。Image img=null;tryimg=Image.createImage(/xx.png);catch(Exception e) try.catch()称为java的异常处理,也就是对运行过程中产生的错误进行处理。try被监视的代码段.catch(.)错误处理代码段。Image类中的createImage函数的定义中,抛出了异常。所以在我们调用这个函数时,必须捕捉这个异常。换言之:语法上createImage函数要求进行异常处理。图片对象创建后,就可以将它用在程序中任何需要Image对象的位置List:列表框,提供若干选择项供选择,三种状态,用Choice类中的三常量决定: Choice.EXCLUSIVE 创建单选项Choice.MULTIPLE 创建多选项Choice.IMPLICIT 创建隐含列表框,在选中某选项同时,产生事件Form屏幕对象前述TextBox、Alert、List是系统定义好的屏幕组件,我们创建它们之后只能设置参数,但无法自由定义。唯有Form可以由程序员自由定义界面。所有的Item子类对象都可以添加到Form中去。用的是Form中的append函数。Item类的常用子类有:TextField:功能与TextBox类似,用于显示与输入的组件。不同的是TextBox是屏幕组件,它可以直接设置到屏幕上,TextField不是屏幕组件,只能添加到Form,而且它是单行输入。ImageItem:图像项,用于显示图片。DateField:日期域,用于显示或修改手机中的日期与时间。ChoiceGroup:选项组,功能 与List相同import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class Demo extends MIDlet Display disp; Form form=new Form(个人信息登记); TextField tf1=new TextField(姓名,10,TextField.ANY), tf2=new TextField(电话号码,11,TextField.PHONENUMBER); ImageItem img; DateField df=new DateField(电子表,DateField.DATE_TIME); public void startApp() Image im=null; tryim=Image.createImage(/344.png);catch(Exception e) img=new ImageItem(图标,im,ImageItem.LAYOUT_CENTER,); form.append(img); form.append(tf1);form.append(tf2); form.append(df); disp=Display.getDisplay(this); disp.setCurrent(form); public void pauseApp() public void destroyApp(boolean b)手机中的菜单(命令项):Command clear=new Command(清除,Command.EXIT,1), exit=new Command(退出,Command.OK,1), option=new Command(选项,Command.SCREEN,1);一个命令项由三部分构成,第二部分为命令型态,决定命令的显示方式,8个命令型态有级别之分, Command.BACK:返回前一屏幕; Command.CANCEL:取消当前正在进行的工作; Command.EXIT:退出应用程序; Command.HELP:请求在线帮助; Command.ITEM:选择命令是当前屏幕中的某一项; Command.OK:确定当前正在进行的动作; Command.SCREEN:应用到当前屏幕的命令; Command.STOP:中断当前正在运行的动作。从上到下,级别由高到低,高级别的命令项可以单独显示在左边,而其他级别相对低命令项全部压缩在右边的Menu项中。第三选项是优先级,决定命令项在界面上出现的次序。优先级高(数越小)越先出现。因此可以总结命令项在界面上出现的先后的规律: 型态 型态相同,决定于优先级 型态优先级都相同,决定于程序中添加的次序只有比Exit更高的型态的命令项可以出现在左边 除Alert之外,其他的屏幕型组件都可以添加命令项:Form List TextBox Canvas事件模型:事件:当按下手机上的按键,就发生了事件。事件分两种。一种是高级事件:按下两个软件按钮产生的事件,这些事件与软件有关,如选定某个命令项。这类事件主要是处理Command组件事件。另一种是低级事件:按动除软件按钮之外的其他按键,产生的事件。低级事件发生在Canvas组件上。高级事件与低级事件的区别在于除事件发生的来源不同之外,高级事件的通用性好,如果在程序中处理的是高级事件,这种程序很容易移植到其他机型。或者说,高级事件处理与机型无关。低级事件,与机型相关联,所以针对低级事件处理的程序,不保证有好的移植性。不保证在某机型上运行正确的程序,在其他机器上一定可以正确运行。以高级事件处理为例,说明事件处理的方法。首先当然必须要在程序加入Command.要处理Command上发生的事件,必须要用某个类的对象作监视器,监视器对象的作用是,监控事件是否发生以及事件发生后应该进行的处理。监视器就是某类的对象,只要该类实现了对应的接口。具体联系到高级事件,它应该实现CommandListener接口。如监视器类可能是如下:public class MyMIDlet extends MIDlet implements CommandListener在java中规定,如果某类实现了某接口,那就必须在该类中写出这个接口的全部接口函数。CommandListener接口中只定义了一个函数。public void commandAction(Command c, Displayable d)当监视器所监视的事件发生,就会使程序转到该函数中运行。第三,要让添加了Command的屏幕组件指定监视器。list.setCommandListener(this);其中的this是在类中指代该类的对象import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class MyMIDlet extends MIDlet implements CommandListener Display disp; List list; Command comm1=new Command(退出,Command.BACK,1),comm2=new Command(还原,Command.SCREEN,1), comm3=new Command(结果,Command.SCREEN,2); public void startApp() list=new List(选择年龄段,Choice.EXCLUSIVE); list.append(0-20岁,null);list.append(21-40岁,null); list.append(41-60岁,null);list.append(60岁以上,null); list.addCommand(comm1);list.addCommand(comm2); list.addCommand(comm3); list.setCommandListener(this); disp=Display.getDisplay(this); disp.setCurrent(list); public void pauseApp() publ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务礼仪培训演讲课件
- 服务接待课件
- 服务公主培训课件
- 法务部门年终课件
- 分图形教学课件
- 肺通气指标课件
- 事业单位护理岗面试2026经典考题试卷及答案
- 事业单位财会岗面试专业面试历年真题题库及解析
- 事业单位工程岗2026面试必练考题全真模拟试卷
- 飞天二教学课件
- 2026中国邮政联合校园招聘笔试参考题库(含答案解析)
- (一模)嘉兴市2026-2027学年第一学期高三教学质量检测语文试卷(含答案)
- 2026中国洗衣干衣行业市场现状需求分析投资布局发展策略研究文献
- 2027年湖北交通投资集团有限公司秋季校园招聘131人笔试备考题库及答案解析
- 2026山东青岛水务集团有限公司招聘笔试历年参考题库附带答案详解
- 2026年党支部基层总结报告
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 2018 机械通风冷却塔 第1部分:中小型开式冷却塔
- 中国膀胱癌诊疗指南2025版
- 梅尼埃病前庭功能检测
- 凉山2025年四川凉山州雷波重点国有林保护局招聘27人笔试历年参考题库附带答案详解
评论
0/150
提交评论