版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
J2EE及JAVA程序设计第三章JAVA面向对象程序设计基础补充主要内容3.3面向对象三大特点3.4类的定义—方法重载3.5包package3.6final、this及其它3.3面向对象编程的概念
面向对象的三大特点:封装、继承、多态
1)封装
封装就是把对象的属性和对这些属性的操作封装在一个单独的数据结构中,并尽可能隐蔽对象的内部细节,包含两个含义:把对象的全部属性和对属性的全部操作结合在一起,形成不可分割的独立单元(即对象)。信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。2)继承继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类或超类。Java不支持多重继承,子类只能有一个父类。在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。继承在Java中无所不在。3)多态
对象的多态是由封装和继承引出的面向对象程序设计语言的另一特征。主要体现在两个方面:方法重载时实现的静态多态和方法重载时实现的动态多态。多态性使得我们的同一方法,可以有多种形式。另外父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,同一个属性或方法在父类及其各个子类中可以具有不同的语义。3.4类的定义—方法重载
方法重载(MethodOverloading)就是一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同,或者是返回值不同。这也是面向对象的程序设计中的奇妙之处,重载反映了大千世界的变化。从另外的含义上来讲,重载也可以看成是同一个方法具有不同的版本,每个版本之间在参数特征和返回值方面有差别。重载是Java实现多态性的一种方式。当调用一个重载方法时,JVM自动根据当前对方法的调用形式在类的定义中匹配形式符合的成员方法,匹配成功后,执行参数类型、数量均相同的成员方法。方法重载在Java的API类库中得到大量的使用。【例】关于成员方法重载的例子//DemoOverload.javaclassDemo2{inta,b;intmethod(){//成员方法一
returna+b;}intmethod(intc){//成员方法二
returna+b+c;}intmethod(intc,intd){//成员方法三
returna+b+c+d;}Demo2(inta,intb){//构造方法
this.a=a;this.b=b;}}【例】关于成员方法重载的例子publicclassDemoOverload{ publicstaticvoidmain(Stringargs[]){Demo2aDemo2=newDemo2(1,2);//实例化
inta=aDemo2.method();//调用成员方法一
System.out.println(a);intb=aDemo2.method(3);//调用成员方法二
System.out.println(b);intc=aDemo2.method(3,4);//调用成员方法三
System.out.println(c); }}上面程序的运行结果为:3610【例】构造方法重载,//ConstructionOverload.javaclassDemo{inta,b,c;//成员变量
publicDemo(){}//构造方法1
publicDemo(inta){//构造方法2 this.a=a;}publicDemo(inta,intb){//构造方法3 this.a=a; this.b=b; }publicDemo(inta,intb,intc){//构造方法4 this.a=a; this.b=b; this.c=c; }}publicclassConstructionOverload{ publicstaticvoidmain(Stringargs[]){//应用第一种构造方法
DemoaDemo=newDemo();System.out.println("方法一成员变量a:"+aDemo.a);System.out.println("方法一成员变量b:"+aDemo.b);System.out.println("方法一成员变量c:"+aDemo.c);//应用第二种构造方法
DemobDemo=newDemo(1);System.out.println("方法二成员变量a:"+bDemo.a);System.out.println("方法二成员变量b:"+bDemo.b);System.out.println("方法二成员变量c:"+bDemo.c);……
从上面的程序中可以看到构造方法的重载。在该程序中,方法Demo()被定义了四次,每次参数不同。第一个构造方法,没有参数,也没有方法体,它和系统的缺省构造方法是一致的。缺省的构造方法确保每个Java类都至少有一个构造方法。如果程序中给出了带参数的构造方法,而没有给出缺省构造方法,这时调用缺省构造方法将导致错误。在调用构造方法时,由于使用的是同一方法名,因此根据构造方法的参数就能找到需要运行的哪个方法。3.5包package1package语句2import语句由于Java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,Java提供包来管理类名空间。包实际上提供了一种命名机制和可见性限制机制。Java虚拟机(JVM)决定如何创建和存储包、子包以及相应的编译单元,并决定哪些顶层包名称在特定的编译中是可见的,以及决定哪些包是可访问的。包可以存储在在当地文件系统中、分布式文件系统当中,或者某种形式的数据库中。Java系统必须支持至少一个无名包(也叫缺省包),一般为当前目录。在开发小的或者临时的应用程序或者刚刚开始开发时,用无名包是非常方便的。package语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:packagepkg1[.pkg2[.pkg3…]];Java编译器把包对应于文件系统的目录。例如:名为myPackage的包中,所有类文件都将存储在目录myPackage下。同时,package语句中,用“.”来指明目录的层次,例如:
packagejava.awt.image;
package;packagemyPackage;
另外,包层次的根目录path是由环境变量classpath来确定的。Java的JDK提供的包(也叫基础类库)包括:
Java.applet、java.awt、java.awt.datatransfer、java.awt.event、java.awt.image、java.beans、java.io、java.lang、java.lang.reflect、java.math、、java.rmi、java.security、java.sql、java.util等。每个包中都包含了许多有用的类和接口。用户也可以定义自己的包来实现自己的应用程序。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个压缩文件。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。但是真正对于我们来说最核心的只有几个,例如java.lang.*;java.io.*;java.util.*;java.sql.*;等。import语句
为了能使用Java中已提供的类,我们需要用import语句来引入所需要的类。其格式为
importpackage1[.package2…].(classname|*);import语句其中package1[.package2…]表明包的层次,与package语句相同,它对应于文件目录,classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号(*)来代替。例如:
importjava.util.Date;
importjava.util.*;
importjavax.swing.event.*;
为了能使用Java中已提供的类,我们需要用import语句来引入所需要的类。其格式为
importpackage1[.package2…].(classname|*);import语句其中package1[.package2…]表明包的层次,与package语句相同,它对应于文件目录,classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号(*)来代替。例如:
importjava.util.Date;
importjava.util.*;
importjavax.swing.event.*;3.6final、this及其它1final关键字2this引用3super关键字4null关键字5java.lang.Object类介绍6递归方法7命令行参数的输入8JAR文件的使用this引用关键字this是用来指向当前对象或类实例的。例如:
publicclassMyDate{privateintday,month,year;publicvoidtomorrow(){this.day=this.day+1;}}这里,this.day指的是当前对象的day字段。或者在成员方法定义时,我们使用的形式参数与成员变量名称相同,这时我们要用到this。例如:classDemothis{inta;//成员变量
publicDemo(inta){ this.a=a;}}super关键字super关键字指明是对父类的引用。关于super可以参考后续章中关于继承的章节。null关键字
在Java语言规范中,null表示类或者变量是空,不代表任何对象或实例。看下面的例子
SomeClassaSomeClass=null;上面的语句中,只定义了类SomeClass的实例aSomeClass,但并没有为之创建任何对象。java.lang.Object类介绍类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法java.lang.Object类介绍
instanceof运算符:
instanceof运算符是一个常用的运算符,该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false。例如:if(b1instanceofButton)doDealB1();其中b1是对象,Button是一个类名。
【例】getClass和Instanceof方法的使用//ClassAndInstance.javaclassSubClass{}classSuperClassextendsSubClass{}publicclassClassAndInstance{publicstaticvoidmain(String[]args){test(newSubClass());test(newSuperClass());}staticvoidtest(Objectx){System.out.println("Testingxoftype"+x.getClass());System.out.println("xinstanceofSubClass"+(xinstanceofSubClass));System.out.println("xinstanceofSuperClass"+(xinstanceofSuperClass));}}程序运行结果:如下:TestingxoftypeclassSubClassxinstanceofSubClasstruexinstanceofSuperClassfalseTestingxoftypeclassSuperClassxinstanceofSubClasstruexinstanceofSuperClasstrue命令行参数的输入在C程序中main()作为一个程序的入口方法,在Java中也同样利用这个方法来启动一个Java程序。main()使用一个字符串数组作为参数,它表示启动Java这个程序时的命令行参数,在下面的例子中我们展现了如何使用main的这个参数。【例】从命令行输入参数//MainArgument.javapublicclassMainArgument{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.println(“Argumnet[”+i+”]:”+args[i]);}}程序运行结果:
D:\user\chap03>javaMainArgumentOneTwoArgumnet[0]:OneArgumnet[1]:TwoJAR文件的使用
JAR文件就是JavaArchiveFile,是Java的一种文档格式。JAR文件非常类似ZIP文件,准确的说,它就是ZIP文件,所以可以叫它文件包。JAR文件与ZIP文件唯一的区别就是在JAR文件的内容中,包含了一个META-INF/MANIFEST.MF文件,这个文件是在生成JAR文件的时候自动创建的。可以使用jar.exe把一些文件压缩成一个JAR文件,来发布我们的应用程序。jar.exe是随JDK安装的,在JDK安装目录下的bin子目录中,文件名为jar.exe。我们可以把java应用程序中涉及到的类压缩成一个JAR文件,比如Tom.jar,然后使用java解释器使用参数-jar执行这个压缩文件,如下格式java-jarTom.jar或用鼠标双击该文件,就可执行这个压缩文件JAR文件的制作步骤如下:首先,假设应用程序中有两个类A、B,其中A类是主类(其中包含了main()方法).1)首先用文本编辑器比如Windows下的记事本编写一个清单文件Mymoon.mfManifest-Version:1.0Main-Class:ACreated-By:1.2.2(SunMicrosystemsInc.)比如,保存Mymoon.mf到D:\user\chap03.需要注意的是在编写清单文件时,在”Manifest-Version”和“1.0”之间,”Main-Class”和主类”A”之间
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主皮带保护试验制度
- 机动队奖惩制度
- 酒店安全生产及奖惩制度
- 直播违规员工奖惩制度
- 公益组织内部奖惩制度
- 快递公司分拣工奖惩制度
- 景区森林防火奖惩制度
- 展柜厂主管考核奖惩制度
- 产伤骨折患者家属的护理指导
- 幼儿园教学工资奖惩制度
- 材料表面与界面研究生教案
- 核电设备设计制造规范标准
- 煤矿改扩建项目审批办理流程指南
- 2022年宜春幼儿师范高等专科学校单招笔试职业技能考试试题及答案解析
- GB/T 5286-2001螺栓、螺钉和螺母用平垫圈总方案
- GB/T 41093-2021机床安全车床
- GB/T 25102.1-2010电声学助听器第1部分:具有感应拾音线圈输入的助听器
- 医院运行与医疗业务指标数据统计收集管理规定
- 【高中地理课件】城市的辐射功能 课件 2022-2023学年高二地理人教版(2019)选择性必修二
- 测量管理体系记录表
- 供应商资质能力核实承诺书
评论
0/150
提交评论