《Java程序设计》课件-项目四 类与对象_第1页
《Java程序设计》课件-项目四 类与对象_第2页
《Java程序设计》课件-项目四 类与对象_第3页
《Java程序设计》课件-项目四 类与对象_第4页
《Java程序设计》课件-项目四 类与对象_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四类与对象Java程序设计4.1面向对象技术简介1.面向过程(又称为结构化程序设计):结构化程序设计是最基本的程序设计方法。面向过程的程序设计简单,可读性强,易于阅读和理解,便于维护,是面向对象程序设计的基础。主张按功能把软件系统逐步细分。程序=数据结构+数据+算法。面向过程把问题求解过程(即算法)放在第一位,主张自顶向下,逐步求精。面向过程提供顺序、分支和循环三种逻辑结构,每种逻辑结构要求单入口和单出口。2.面向对象:是一种以事物为中心的编程思想,用一种更符合人们认识客观世界的思维方式进行程序设计。它克服了面向过程的缺点,用一种更符合人们认识客观世界的思维方式进行程序设计,达到了软件工程的三个主要目标:重用性、灵活性和扩展性。

面向过程和面向对象的对比Java程序设计面向对象技术简介面向对象的四大特征:抽象、封装、继承和多态。1.抽象:其实也是所有计算机语言的特征。指从众多的事物中舍弃个别的、非本质的部分,提炼出计算机系统所关注的、共同的、本质的部分(属性和功能)的过程。抽象包括过程抽象和数据抽象。面向对象的特征Java程序设计4.1面向对象技术简介面向对象技术简介2.封装封装(Encapsulation)指属性和方法的定义都封装在类定义中,然后通过其可见性(public、protected、private)来细粒度控制外部对类成员的可访问性。面向对象的特征Java程序设计4.1面向对象技术简介面向对象技术简介3.继承继承(Inheritance)以原有的类为基础来创建一个新的子类,子类继承父类的所有特性,并可以扩充自己的特性,从而达到代码复用的目的。通过extends关键字继承原有类派生出子类,进而构造出更为复杂的数据类型。继承为共享数据和操作提供了一种良好的机制,提高了软件的重用性、可用性和一致性。面向对象的特征Java程序设计4.1面向对象技术简介面向对象技术简介4.多态多态性是指程序中出现的方法或变量“重名”现象。(1)

方法的重载(Overload)方法的重载指同一类中有相同的方法名但有不同的形式参数的语法现象。与方法的返回值类型、方法修饰符等没有关系。(2)

构造方法的重载创建对象时根据参数的不同引用不同的构造方法。(3)

成员方法和成员变量的覆盖(Override)Java允许子类对父类的同名方法进行重新定义或修改。可以用this.和super.来区分是调用父类还是子类的。面向对象的特征Java程序设计4.1面向对象技术简介4.2类与对象类是Java程序中基本的结构单位所有Java语句出现在方法中,所有的方法都定义在类中。语法格式如下:[类修饰符]class<类名>[extends<父类名>][implements<接口列表>]{[<初始化语句块>] [<成员变量>][<构造方法>] [<成员方法>]…………}提示:类实际上是定义一个模板,而对象是由这个模板产生的一个实例。类的定义Java程序设计类的定义Java程序设计对类声明的格式说明如下:方括号“[]”中的内容为可选项,在下边的格式说明中意义相同,不再重述。2)访问限定符的作用是:确定该定义类可以被哪些类使用。可用的访问限定符如下:public表明是公有的。可以在任何Java程序中的任何对象里使用公有的类。该限定符也用于限定成员变量和方法。如果定义类时使用public进行限定,则类所在的文件名必须与此类名相同(包括大小写)private表明是私有的。该限定符可用于定义内部类,也可用于限定成员变量和方法。protected表明是保护的。只能为其子类所访问。默认访问若没有访问限定符,则系统默认是友元的(friendly)。友元的类可以被本类包中的所有类访问。3)修饰符的作用是:确定该定义类如何被其他类使用。可用的类修饰符如下:abstract说明该类是抽象类。抽象类不能直接生成对象。final说明该类是最终类,最终类是不能被继承的。4)class是关键字,定义类的标志(注意全是小写)。5)类名是该类的名字,是一个Java标识符,含义应该明确。一般情况下单词首字大写。6)父类名跟在关键字“extends”后,说明所定义的类是该父类的子类,它将继承该父类的属性和行为。父类可以是Java类库中的类,也可以是本程序或其他程序中定义的类。7)接口名表是接口名的一个列表,跟在关键字“implements”后,说明所定义的类要实现列表中的所有接口。一个类可以实现多个接口,接口名之间以逗号分隔。如前所述,Java不支持多重继承,类似多重继承的功能是靠接口实现的。4.2类与对象类的定义成员变量(属性Attribute、字段Field)指定义在类中方法外的变量或常量。成员变量的有效范围是整个类,相当于类的全局变量。1.语法格式[访问限定符][修饰符]数据类型成员变量名[=初始值];2.格式说明1)访问限定符用于限定成员变量被其它类中的对象访问的权限,和如上所述的类访问限定符类似。2)修饰符用来确定成员变量如何在其他类中使用。可用的修饰符如下:static表明声明的成员变量为静态的。静态成员变量的值可以由该类所有的对象共享,它属于类,而不属于该类的某个对象。即使不创建对象,使用“类名.静态成员变量”也可访问静态成员变量。final表明声明的成员变量是一个最终变量,即常量。transient表明声明的成员变量是一个暂时性成员变量。一般来说成员变量是类对象的一部分,与对象一起被存档(保存),但暂时性成员变量不被保存。volatile表明声明的成员变量在多线程环境下的并发线程中将保持变量的一致性。3)数据类型可以是简单的数据类型,也可以是类、字符串等类型,它表明成员变量的数据类型。成员变量Java程序设计4.2类与对象类的定义3.类成员变量(也叫类属性、类变量、静态变量、静态属性)类成员变量指有static修饰的成员变量。类成员变量属于类成员,当类载入内存,即分配内存和初始化,为该类的所有对象所共享。在静态方法和非静态方法都可以直接通过“类名.变量名”来访问类成员变量。4.对象成员变量(也叫对象属性、对象变量、非静态变量、动态变量等)对象成员变量属于对象,只有在实例化对象时才能分配内存和初始化,为该对象所有。静态方法和非静态方法访问对象成员变量时,需要先new实例化一个对象,然后通过“对象名.变量名”的方式来访问。当前对象可以省略,this.r->r。当对象成员变量和局部变量重名时,用this来区分。Java程序设计4.2类与对象注意:在

Java中是允许把许多类的声明放在一个

Java中的,但是这些类只能有一个类被声明为public,而且这个类名必须和

Java文件名相同。对象Java程序设计对象的创建和使用1.声明对象声明对象的一般格式如下:类名对象名;例如:Personp1,p2;//声明了两个人的对象声明对象后,系统还没有为对象分配存储空间,只是建立了空的引用,通常称之为空对象(null)。因此对象还不能使用。2.创建对象对象只有在创建后才能使用,创建对象的一般格式如下:对象名=new类构造方法名([实参表]);其中:类构造方法名就是类名。new运算符用于为对象分配存储空间,它调用构造方法,获得对象的引用(对象在内存中的地址)。例如:p1=newPerson("张英","女","23");注意:声明对象和创建对象也可以合并为一条语名,其一般格式是:类名对象名=new类构造方法名([实参表]);例如:Personp1=newPerson("张英","女","23");提示:new运算符完成的实际工作是为对象分配内存。4.2类与对象对象Java程序设计3)引用对象引用成员变量的一般格式是:对象名.成员变量名在创建对象时,某些属性没有给于确定的值,随后可以修改这些属性值。例如:Personp2=newPerson("丽丽","女","");对象p2的别名和出生年月都给了空值,我们可以下边的语句修正它们:p2.age="20";4)举例:创建人的对象,并并显示对象的属性值。publicclassPerson{ Stringname; Stringsex; Stringage;publicstaticvoidmain(Stringargs[]){ Personp1=newPerson();//声明并创建一个对象p1//为对象附属性值 ="张丽"; p1.sex="女"; p1.age="18";//输出对象的属性值

System.out.println("对象的信息为:\n姓名为:"++"\n性别为:"+p1.sex+"\n年龄为:"+p1.age); }4.2类与对象任务实践Java程序设计任务描述购物系统后台需要对会员信息进行管理,需要设计会员信息类,信息中主要包括会员卡号、会员姓名、会员生日、会员积分,请用所学的知识将会员信息进行输出。任务分析:1、能进行会员信息类的设计与制作。2、能进行会员对象的引用3、输出并打印会员的详细信息

实施步骤:1.创建data包,在包创建一个cust类packageData;publicclassCust{//定义变量为public,可以在不同的包中应用,否则只能在本包使用 publicint

custNo; publicStringcustName; publicStringcustBir; publicint

custScore;}任务实践Java程序设计2.创建entity包,在包创建一个custinformaiton类,在类中创建对象cust1,对对象赋值 Custcust1=newCust();cust1.custNo=12345;cust1.custName="张悦";cust1.custBir="12月10日";cust1.custScore=2000;3.输出对象的值System.out.println("会员卡号为:"+cust1.custNo+"\n"+"会员姓名为:"+cust1.custName+"\n"+"会员生日为:"+cust1.custBir+"\n"+"会员积分为:"+cust1.custScore);

3.全部代码如下:importData.Cust;publicclassCustInformation{ publicstaticvoidmain(String[]args){

Custcust1=newCust();cust1.custNo=12345;cust1.custName="张悦";cust1.custBir="12月10日";cust1.custScore=2000;

System.out.println("会员卡号为:"+cust1.custNo+"\n"+"会员姓名为:"+cust1.custName+"\n"+"会员生日为:"+cust1.custBir+"\n"+"会员积分为:"+cust1.custScore);}}4.3方法成员方法的定义Java程序设计成员方法用来实现类的行为。方法也包含两部分,方法声明和方法体(操作代码)。1.方法定义格式方法定义的一般格式如下:[访问限定符][修饰符]返回值类型方法名([形式参数表])[throws异常表]{[变量声明]//方法内用的变量,局部变量[程序代码]//方法的主体代码[return[表达式]]//返回语句}方法2.成员方法的定义Java程序设计在方法声明中:1)访问限定符如前所述。2)修饰符用于表明方法的使用方式。可用于方法的修饰符如下:abstract说明该方法是抽象方法,即没有方法体(只有“{}”引起的空体方法)。final说明该方法是最终方法,即不能被重写。static说明该方法是静态方法,可通过类名直接调用。native说明该方法是本地化方法,它集成了其他语言的代码。synchronized说明该方法用于多线程中的同步处理。3)返回值类型应是合法的java数据类型。方法可以返回值,也可不返回值,可视具体需要而定。如果方法没有返回值,可用void(空值)指定,则return语句可以省略4)方法名是合法Java标识符,声明了方法的名字。5)形式参数表说明方法所需要的参数,有两个以上参数时,用“,”号分隔各参数,说明参数时,应声明它的数据类型。6)throws异常表定义在执行方法的过程中可能抛出的异常对象的列表(放在后边的异常的章节中讨论)。方法体内是完成类行为的操作代码。根据具体需要,有时会修改或获取对象的某个属性值,也会访问列出对象的相关属性值。4.3方法方法2.成员方法的定义Java程序设计2.方法举例:定义一个Person类的成员方法(人类的的行为可以有吃饭、睡觉等)。这样在人这个类中就可以进行吃饭和睡觉的方法定义:

publicclassPerson{ Stringname; Stringsex; Stringage;//下边是成员方法

publicvoideat(){

System.out.println("她在吃饭"); }

publicvoidsleep(){

System.out.println("她在睡觉"); }}这也是一个完成的类的定义,包括类的声明、成员变量的声明和成员方法的定义。4.3方法方法方法的调用原则:先定义(系统、第三方或用户自定义),用import语句引入所在的类后,即可调用。语法格式:调用者.方法名([实际参数表]);说明:实参的个数、顺序、类型要和形式参数一一对应。调用其它包中的方法时,需要先用import语句引入,再调用。调用类方法的方法:包路径.类名.方法名([实际参数表]);或当用import语句引入其它包中的类时,包路径可以省略;当前类可以省略。调用对象方法的方法:先实例化一个对象,然后通过“对象名.方法名([实参数表]);”当前对象this可以省略。3.成员方法的调用Java程序设计4.3方法方法数学上的递归思想简单、直接、有效,用计算机编程实现时十分方便,易于理解。缺点是是内存消耗大、效率较低。为防止出现方法的无限循环递归调用,要求使用递归调用的前提是通过递归能够不断缩小问题规模,而且缩小到一定规模有一个结束点。以阶乘为例说明递归的用法数学上自然数n(n>1)阶乘的定义有两种:传统定义:n!=1×2×3×……×n递归定义:n!=n×(n-1)!,1!=14.成员方法的递归调用Java程序设计4.3方法方法Personp1=newPerson();1.构造方法定义构造方法(Constructor)是Java类中一种特殊方法,是用来生成实例对象,并为对象分配内存空间和成员变量初始化(数值类型byte,short,int,long,float,double初始化为0,boolean初始化为false,char初始化为’\0’,引用类型全部初始化为null)。语法格式如下:[public]类名([形式参数列表]){[方法体]}

5.构造方法Java程序设计4.3方法方法2.默认构造方法(无参构造):Person类的默认构造方法为:publicPerson(){}实现的实际效果如下:PublicPerson(){name=null;sex=null;age=0;}Java程序设计3.有参构造方法:为定义的Person类中添加带有参数的构造方法:publicPerson(Stringname,Stringsex,Stringage){ =name; this.sex=sex; this.age=age; }4.3方法注意:构造函数的作用是生成对象,并对对象的实例变量进行初始化。系统自带的默认构造函数把所有的数字变量设为

0,把所有的boolean型变量设为

false,

把所有的对象变量都设为

null。方法Java程序设计4.构造方法举例://定义一个类PersonpublicclassPerson{ Stringname; Stringsex; Stringage;//无参构造方法,输出“构造方法”语句(此构造方法不是默认构造方法)publicPerson(){

System.out.println("无参构造方法"); }//有参构造方法定义,输出传递的参数值publicPerson(Stringname,Stringsex,Stringage){ =name;

this.sex=sex;

this.age=age;

System.out.println("有参构造方法");

System.out.println("姓名为:"+name+"\n性别为:"+sex+"\n年龄为:"+age); }publicstaticvoidmain(Stringargs[]){//实例化一个Person类对象p1,会自动调用Person中的无参构造方法 Personp1=newPerson();//实例化一个Person类对象p2,会自动调用Person中的有参构造方法,并将进行传递参数 Personp2=newPerson("张丽","女","20"); }}输出结果:无参构造方法有参构造方法姓名为:张丽性别为:女年龄为:20

4.3方法方法的调用1.静态方法调用所谓静态方法,就是以“static”修饰符说明的方法。一般我们把静态方法称之为类方法,在不创建对象的前提下,可以直接引用静态方法。引用的一般格式为:类名.静态方法名([实参表])或者静态方法名([实参表])

Java程序设计publicclassPerson{ Stringname; Stringsex; Stringage;//在类中创建静态方法eat()publicstaticvoideat(){System.out.println("她在吃饭"); }//main方法,作为类的主入口publicstaticvoidmain(Stringargs[]){eat();//直接方法即可调用方法Person.eat();//直接用类名.方法即可调用方法 } }输出结果为:她在吃饭4.3方法方法的调用2.非静态方法调用非静态方法称之为类的实例方法,它在使用的时候必须实例化一个该类的对象,然后通过对像访问。其引用的一般格式为:类名

对象名=new类构造方法名([实参表]);对象名.非静态方法名([实参表])

注意:使用静态方法的时候需要注意以下两点:静态方法不能直接访问非静态变量。非静态方法可以直接访问静态变量。Java程序设计publicclassPerson{ Stringname; Stringsex; Stringage;//在类中创建非静态方法eat()

publicvoideat() {System.out.println("她在吃饭"); }publicstaticvoidmain(Stringargs[]){//调用类Person的非静态方法eat(),必须先创建Person类的对象p1Personp1=newPerson();//利用对象p1.eat();进行方法调用

p1.eat(); } }4.3方法方法的调用举例:Java程序设计主入口Main调用Login类的登录界面1.登录2.退出调用1登录方法,进入系统界面1.会员信息管理2.购物结算3.真情回馈4.注销调用1会员信息管理方法,进入会员管理界面1.添加会员信息2.修改会员信息3.查询会员信息4.显示会员信息调用1会员信息管理类中的add方法Loginlogin=newLogin();Login.mainlogin();Loginlogin=newLogin();Login.custlogin();Loginlogin=newLogin();Login.custinformaiton();custOperationcustoperation=newcustOperation();Custoperation.add();4.3方法Java文档注释>javadoc–ddoc–encodingutf8–author–versionBinarySearch.java-d生成API文档的文件夹相对路径-encodingutf81.利用javadoc.exe生成API文档的方法Java程序设计Java文档注释File->Export…->Java->javadocjavadoc默认读取操作系统采用的字符编码(通过环境变量,中文windows默认GBK)。如果和MyEclipse中编辑Java源文件的文本编辑器编码不一致,就会出现“编码GBK的不可映射字符”的异常信息。解决办法:在Workspace或project属性中将字符编码设置为GBK;在对话框的"ExtraJavadocoptions"文本框里面加上:-encodingUTF-8-charsetUTF-82.在MyEclipse中生成API文档的方法Java程序设计Java程序设计4.4Java.lang包中的常见类Object类是所有Java类的根父类,Java中的每一个类都是Object直接或间接子类。在Object类中已经定义了的所有Java类经常使用的基础性的方法,子类可以直接使用或覆盖后使用。1.protectedObjectclone()基本数据类型变量的备份。使用方法见示例程序。2.publicinthashCode()返回该对象的哈希码。3.publicbooleanequals(Objectobj))功能默认与关系运算符==相同,比较两个对象的地址是否相等。String、Integer、Double等类已经覆盖了Object类中的equals()方法:比较两个对象的内容是否相等。(见示例程序)4.publicStringtoString()返回该对象的字符串表示。5.protectedvoidfinalize()垃圾回收器。Object类Java程序设计Class类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口,其它如数组、八种基本数据类型、void都被映射成Class的一个对象。Class对象中包含类和接口定义信息和成员信息(构造方法、属性、一般方法、注解等)。Class没有公共构造方法。当加载类时,Class对象是在加载类时由JVM以及通过调用类加载器中的defineClass()自动构造的。Class类是Java反射技术的基础。几乎所有的框架Hibernate、Spring、Struts、JUnit都用到了反射技术。反射技术就是把Java中的元素(类、接口、数组构造方法、属性、一般方法、注解等)映射成Java的类。

Class类Java程序设计4.4Java.lang包中的常见类1.System类System类提供了对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。System类的常用属性:publicstaticfinalInputStreamin:标准输入设备-键盘;publicstaticfinalPrintStreamout:标准输出设备-屏幕;publicstaticfinalPrintStreamerr:标准出错设备。System、Runtime类Java程序设计•2016版Java程序设计4.4Java.lang包中的常见类System类的常用方法:publicstaticlongcurrentTimeMillis():与Date类提供getTime()、和Calendar类getTimeInMillis()都提供了获取毫秒数的方法。publicstaticMap<String,String>getenv():取操作系统的环境变量,相当于Dos命令set。publicstaticPropertiesgetProperties():Properties是Hashtable的子类。publicstaticvoidexit(intstatus):终止当前正在运行的Java虚拟机,status状态码取0时代表正常终止,否则异常终止,常用于GUI应用程序。publicstaticvoidgc():申请进行JVM进行垃圾回收。(见示例程序)System、Runtime类Java程序设计•2016版Java程序设计4.4Java.lang包中的常见类5.1Java.lang包中的常见类2.RunTime类Runtime类用于表示JVM运行时的状态。Runtime类的常用方法:publicstaticRuntimegetRuntime(),应用程序不能通过new+构造方法方式来创建Runtime类实例,只能通过System.getRuntime()的方式来创建Runtime类实例。publicvoidexit(intstatus)publicProcessexec(Stringcommand)publiclongfreeMemory():当前JVM可用空闲内存数。ubliclongmaxMemory():当前JVM可用最大内存数。publicvoidgc()System、Runtime类Java程序设计•2016版Java程序设计4.4Java.lang包中的常见类5.1Java.lang包中的常见类1.java.lang.Math类提供常用的数学常量和数学方法。Math类中所有的变量和方法都是static和final,可以直接使用“类名.方法”的形式调用。常量:Math.PI和Math.E三角函数:sin()、cos()、tan()、asin()、acos()、atan()……数学函数:log()、exp()、pow()、max()、min()、abs()……提示:Math类提供了三角函数及其它的数学计算方法,它们都是static型的,在使用时直接作为类方法使用即可,不需要专门创建Math类的对象。2.java.util.Random类java.lang.Math.random()方法只能产生0.0≤x≤1.0范围内的double的随机值。但java.util.Random类的对象可以产生随机的boolean,byte,float,double,int,long和高斯值。Math类和java.util.Random类Java程序设计•2016版Java程序设计4.4Java.lang包中的常见类5.1Java.lang包中的常见类publicabstractclassNumberimplementsSerializable抽象类Number是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long和Short类的超类。包含六个抽象方法,Number的子类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论