版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章面向对象程序设计1、类2、对象3、接口4.1编程语言的几个发展阶段机器语言如:汇编语言过程语言 如:c语言,Fortran语言等使用面向过程语言,人们只需按着自己的意图来编写各个函数,语言的语法更接近人们的自然语言,所以,习惯上也称过程语言是高级语言.但是,无论那种高级语言编写的源文献,计算机都不能直接执行,由于计算机只能直接辨认,执行机器指令.因此,必须把源文献转换成机器指令,然后计算机去执行相应的机器指令.将高级语言编写的源程序转化成机器指令,经常使用下列两种方式:(1)编译方式ﻩCompilation:针对当前的机器解决器芯片,将源程序所有翻译成机器指令,称做目的程序,再将目的程序交给计算机执行.(2)解释方式 Interpretation:这种方式不产生整个的目的程序,而是根据当前的机器解决器芯片,边翻译边执行,翻译一句执行一句.Java语言的解决方式既不是第1种也不是第二种,Java语言的发明发明之处在于,它不针对特定的CPU芯片进行编译。Java提供的编译器把源程序编译成称做字节码的一个中间代码.字节码是很接近机器码的文献,可以在提供了Java虚拟机JVM的任何系统上被解释执行.因此,Java本质上是解释执行的程序,当字节码加载到内存之后,再由Java的解释器对字节码按上述2的解释方式执行,即翻译一句,执行一句,不产生整个的机器代码程序,翻译过程假如不出现错误,就一直进行到所有执行完毕,否则将在错误处停止执行.同一个程序,假如是解释执行的,那么它的运营速度通常会比被编译成可执行的机器代码的运营速度慢些.但是,对Java来说,两者的差别不太大,Java的字节码通过仔细设计,很容易便能使用.JIT即时编译方式编译技术将字节码直接转化成高性能的本地机器码,Sun公司在Java2发行版中提供了这样一个字节码编译器:ﻩ---JIT(JustInTime),它是Java虚拟机的一部分.Java运营系统在提供JIT的同时仍具有平台独立性,因而”高效且跨平台”对java来说不再矛盾.ﻩ假如把Java的源文献比做”汉语”的话,字节码就相称于”世界语”,世界语不和具体的”国家”有关,只要这个”国家”提供了”翻译”,就可以再快速地把世界语翻译成本地语言.面向对象编程随着计算机硬件设备功能的进一步提高,使得基于对象的编程成为也许.基于对象的编程更加符合人的思维模式,编写的程序更加健壮和强大,更重要的是,面向对象编程鼓励发明性的程序设计.Java是面向对象语言,它的源程序是由若干个类组成,源文献是扩展名为.java的文本文献.因此,要学习Java编程就必须学会如何去写类,即如何用Java的语法去描述一类事物共有的属性和功能.属性通过变量来刻画,功能通过方法来体现,即方法操作属性形成一定的算法来实现一个具体的功能.类把数据和对数据的操作封装成一个整体.4.2类类是组成Java程序的基本要素.类封装了一类对象的状态和方法.类是用来定义对象的模板.类的实现涉及两部分:类声明和类体.基本格式为:class类名{ …ﻩﻩ类体的内容……}class是关键字,用来定义类.”class类名”是类的声明部分,类名必须是合法的Java标记符.两个大括号以及之间的内容是类体.4.2.1.类声明以下是两个类声明的例子.classPeople{…}class植物{…}“classPeople”和”class植物”叫做类声明”People”和”植物”分别是类名。类命名最佳遵守下列习惯:(1)假如类名使用拉丁字母,那么名字的首写字母使用大写字母,如Hello,Time,People等.(2)类名最佳见名得意,当类名由几个”单词”复合而成时,每个单词的首写字母使用大写。如BeijingTime,AmericanGame,HelloChina等.4.2.2.类体写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现.类声明之后的一对大括号“{”,“}”以及它们之间的内容称做类体,大括号之间的内容称做类体的内容.类体的内容由两部分构成:ﻩ一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能.下面是一个类名为”梯形”的类,类体内容的变量定义部分定义了4个float类型的变量”上底”,”下底”,”高”和”面积”,方法定义部分定义了两个方法”计算面积”和”修改高”.class梯形{ﻩfloat上底,下底,高,面积;//变量定义部分. float计算面积()//方法定义ﻩ{ ﻩ面积=(上底+下底)*高/2.0f;ﻩﻩreturn面积; }ﻩvoid修改高(floath)//方法定义ﻩ{ 高=h; }}4.2.3.成员变量和局部变量我们已经知道类体分为两部分:.ﻩ变量定义部分所定义的变量被称为类的成员变量.ﻩ在方法体中定义的变量和方法的参数被称为局部变量.成员变量和局部变量的类型可以是Java中的任何一种数据类型,涉及基本类型:整型、浮点型、字符型,布尔型。 引用类型:数组类型和对象。 对象也称作类类型变量。classPeople{ intboy;floata[];ﻩvoidf(){ﻩﻩbooleancool; ﻩWorkmanzhangboy; ﻩ……}}classWorkman{ﻩdoublex;Peoplezhiwei; ……}ﻩPeople类的成员变量a是浮点数组型变量,cool是局部量,zhangboy是类类型(对象)局部变量,类Workman中的zhiwei是类类型变量,即对象.classSun{ intdistance; intfind() { ﻩﻩinta=12;ﻩ distance=a;//合法,distance在整个类内有效.ﻩ returndistance; }ﻩﻩvoidg() {ﻩ ﻩinty; ﻩy=a;//非法,由于a以失效,而方法g内又没有定义变量a }}(2)成员变量在整个类内都有效,局部变量只在定义它的方法内有效.成员变量与它在类体中书写的先后位置无关,例如,前述的梯形类也可以写成:class梯形{float上底,面积;//成员变量的定义.float计算面积(){面积=(上底+下底)*高/2.0f;return面积;}float下底;//成员变量的定义.void修改高(floath)//方法定义.{高=h;}float高;//成员变量的定义.}注意:但不提倡把成员变量的定义分散地写在方法之间或类体的最后,人们习惯先介绍属性再介绍功能.(3)成员变量又分为实例成员变量(简称实例变量)和类成员变量(简称类变量)例如: classdogﻩ{ﻩ floatx;ﻩﻩstaticinty; ……ﻩ} 其中x是实例变量,而y是类变量.假如成员变量的类型前面加上关键字static,这样的成员变量称做是类变量或静态成员变量.再学习过对象之后,就会知道实例变量和类变量的区别.(4)假如局部变量的名字与成员变量的名字相同,则成员变量被屏蔽,即这个成员变量在这个方法内暂时失效.classTom{ intx=98,y;voidf(){ﻩﻩintx=3;ﻩﻩy=x; //y得到的值是3,不是98.假如方法f中没有”intx=3;”语句,y的值将是98.}}(5)我们已经知道,假如局部变量的名字与成员变量的名字相同,,则成员变量被屏蔽.ﻩ这时假如想在该方法内使用成员变量,必须使用关键字this. class三角形ﻩ{ﻩﻩfloatsideA,sideB,sideC,lengthSum; voidsetSide(floatsideA,floatsideB,floatsideC) {ﻩ this.sideA=sideA;ﻩﻩﻩthis.sideB=sideB;ﻩﻩ this.sideC=sideC;ﻩ }ﻩ} this.sideA,this.sideB,this.sideC就分别表达成员变量sideA,sideB,sideC.4.2.4.方法我们已经知道一个类的类体由两部分组成:变量的定义和方法的定义.方法的定义涉及两部分:方法声明和方法体一般格式为:方法声明部分ﻩ{ ﻩ方法体的内容ﻩ}(1)方法声明.最基本的方法声明涉及方法名和方法的返回类型,如:floatarea(){…}方法返回的数据的类型可以是任意的Java数据类型,当一个方法不需要返回数据时,返回类型必须是void.很多的方法声明中都给出方法的参数,参数是用逗号隔开的一些变量声明.方法的参数可以是任意的Java数据类型.方法的名字必须符合标记符规定.在给方法起名字时应遵守良好的习惯:名字假如使用拉丁字母,首写字母使用小写.假如由多个单词组成,从第2个单词开始的其它单词的首写字母使用大写。 例如ﻩfloatgetTrangleArea()ﻩvoidsetCircleRadius(doubleradius)等.(2)方法体ﻩ方法声明之后的一对大括号”{“,”}”以及之间的内容称做方法的方法体.方法体的内容涉及局部变量的定义和合法的Java语句。 intgetSum(intn) { ﻩintsum=0;ﻩ for(inti=1;i<=n;i++)ﻩ {ﻩﻩﻩsum=sum+i;ﻩﻩ}ﻩ returnsum; }方法参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效.写一个方法和C语言中写一个函数完全类似,只但是在这里称做方法罢了.局部变量的名字必须符合标记符规定,遵守习惯名字假如使用拉丁字母,首写字母使用小写.假如由多个单词组成,从第2个单词开始的其它单词的首写字母使用大写.4.2.5.方法重载方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同.下面的Area类中getArea方法是一个重载方法.(1).如何创建对象Objectobj=newObject()Object表达的要创建的对象的类型obj表达的是创建的对象的名称new是创建对象的关键字Object()是创建对象所使用的构造方法(2).假如是用Objectobj表达声明一个对象但是并没有为该对象分派内存空间。什么是构造方法:构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型(3).构造方法是创建对象的时候调用的。(4).每一个类都有一个默认的构造方法(使用javap命令来检查一个.class文献的结构)格式为:publicpackagename.ClassName()即共有的无参的例如:publicStudent(){}(5).假如我们在一个类中定义了一个有参数的构造方法那么默认的构造方法就不存在了。(6)假如创建了一个对象,并且类中声明的属性没有初始值那么java会为其分派默认值:对于引用类型为null(空的)对于基本数据类型int为0、float为0.0、boolean为false、char为空字符。(7).在一个类中可以有多个构造方法,那么这些方法的参数必须不同(个数不同,类型不同,与参数名字无任何关系)方法重载:方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同.方法重载示例:classArea{ﻩfloatgetArea(floatr)ﻩ{ﻩ return3.14f*r*r; } doublegetArea(floatx,inty) { ﻩreturnx*yﻩ} floatgetArea(intx,floaty)ﻩ{ﻩﻩreturnx*y; }ﻩdoublegetArea(floatx,floaty,floatz) { ﻩreturn(x*x+y*y+z*z)*2.0;ﻩ}}注:方法的返回类型和参数的名字不参与比较,也就是说假如两个方法的名字相同,即使类型不同,也必须保证参数不同.※※※4.2.6.构造方法构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型.class梯形{ﻩfloat上底,下底,高; 梯形()ﻩ{ﻩﻩ上底=60;ﻩﻩ下底=100; 高=20; }ﻩ梯形(floatx,inty,floath)ﻩ{ ﻩ上底=x; ﻩ下底=y;ﻩ 高=h;ﻩ}}4.2.7.类方法和实例方法我们已经知道,成员变量可分为实例变量和类变量.同样,类中的方法也可分为实例方法和类方法,如classA{ inta; floatmax(floatx,floaty) {ﻩﻩ……ﻩ}ﻩstaticfloatjerry()ﻩ{ﻩ ……ﻩ}}类A中的方法jerry和speak是类方法,max是实例方法,即方法声明时,方法类型前面不加关键字static的是实例方法,加static的是类方法.注意static需放在方法的类型的前面.4.2.8.两个值得注意的问题(1)对成员变量的操作只能放在方法中,方法可以对成员变量和方法体中自己定义的局部变量进行操作.在定义类的成员变量时可以同时赋予初值,如:classA{ inta=12;ﻩfloatb=12.56f;}但是不可以这样做classA{ inta; floatb;ﻩ//a=12;非法,只能放在方法中 //b=12.56f;非法}但需要注意的是,实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作.如:classA{ inta;ﻩstaticintb;ﻩvoidf(intx,inty) { ﻩ //a=x;合法. ﻩ//b=y;合法. } staticvoidg(intz) {ﻩ //b=23;合法.ﻩﻩ//a=z;非法. }}(2)一个类中的方法可以互相调用,实例方法可以调用该类中的其它方法;类中的类方法只能调用该类的类方法,不能调用实例方法.4.3对象我们已经说过类是创建对象的模板.当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。4.3.1.创建对象创建一个对象涉及对象的声明和为对象分派内存两个环节.(1)、对象的声明.ﻩ一般格式为:类的名字对象名字; 如:PeoplezhangPingﻩ这里People是一个类的名字,zhangPing是我们声明的对象的名字.(2)、为声明的对象分派内存.使用new运算符和类的构造方法为声明的对象分派内存,假如类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的)如:zhangPing=newPeople();以下是两个具体的例子。classXiyoujiRenwu{ floatheight,weight;ﻩString
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年新式供电服务合同范本
- 04年施工现场临时设施建设与拆除合同
- 2024-2030年中国高频无感电阻行业市场运营模式及未来发展动向预测报告
- 2024年新仓库租赁协议:场地使用说明
- 2024-2030年中国高端童装行业营销模式及投资前景预测报告
- 2024-2030年中国高校后勤行业发展创新模式及投资前景展望报告
- 2024-2030年中国马口铁三片罐行业发展现状及投资规模分析报告
- 2024-2030年中国陶瓷上绝缘板行业市场运营模式及未来发展动向预测报告
- 2024年中、高档黑白超声诊断仪项目资金需求报告代可行性研究报告
- 2024年度建筑外观设计咨询合同
- 缺乳(乳汁淤积)产妇的中医护理
- 2024北师大版新教材初中数学七年级上册内容解读课件(深度)
- 2024年公共营养师三级考试试卷及答案
- 2024年上半年软考信息系统项目管理师真题
- 北京市西城区2023-2024学年高一下学期期末英语试题(解析版)
- 三位数乘两位数乘法竖式计算练习100道及答案
- 【金融模拟交易实践报告书3700字(论文)】
- 人教版美术六年级上册《第3课 远去的路》说课稿6
- iso220002024食品安全管理体系
- 创伤失血性休克中国急诊专家共识2023解读课件
- 天津2024年天津市津南医院招聘72人笔试历年典型考题及考点附答案解析
评论
0/150
提交评论