Java程序设计4对象和类.ppt

上传人:sccc 文档编号:5577283 上传时间:2023-07-30 格式:PPT 页数:67 大小:654.01KB
返回 下载 相关 举报
Java程序设计4对象和类.ppt_第1页
第1页 / 共67页
Java程序设计4对象和类.ppt_第2页
第2页 / 共67页
Java程序设计4对象和类.ppt_第3页
第3页 / 共67页
Java程序设计4对象和类.ppt_第4页
第4页 / 共67页
Java程序设计4对象和类.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《Java程序设计4对象和类.ppt》由会员分享,可在线阅读,更多相关《Java程序设计4对象和类.ppt(67页珍藏版)》请在三一办公上搜索。

1、Java程序设计,类和对象,对象和类,学习目标:理解类和对象的概念及区别掌握类的定义以及类之间的关系描述理解对象间的通信方式认识UML基本图示含义,能够应用UML图示描述设计模型理解构造函数的作用理解对象的生存周期理解并掌握变量的作用域理解关键字this的用法理解并掌握方法的声明和调用掌握基本的范型和枚举类型的机制理解包,掌握包的作用,4.1 什么是对象,对象是什么?对象就是组成现实世界的个体,它们之间存在着错综复杂的关系,正是这种关系的存在构成了丰富多彩的世界。面向对象的分析就是要把这些对象以及对象之间的关系找出来。现实生活中的对象学生、课程、教师、选课单.一个银行转帐监视系统中的帐户、交易

2、、审查策略.,4.1.1 对象里面是什么,对象三要素对象的名称(标识符)表现对象状态的属性集展示对象能力的行为集,4.1.1 对象里面是什么(cont.),对象的符号,对象的简化符号,4.1.2 对象的生存周期,对象是通过某个时刻某个客观存在的状态集来表现的。世界上没有恒存的事物,所以对象也具备从创建到消亡的生存周期。一个对象只有被创建出来,才具备生命力,当它达到某个条件,便归于消亡。,4.1.2 对象的生存周期(cont.),1.声明、创建对象修饰符 类型 变量名=初值,变量名=初值Student student=null;Student student=new Student(180523

3、01);注:对象引用变量的声明和一般变量的声明没有任何区别,可能出现的位置都是一样的。,4.1.2 对象的生存周期(cont.),2.使用对象如:System.out.println(“Welcome!”);student.showAcademicRecord();/这句代码意思是告诉对象student,执行showAcademicRecord(),列出student这个对象的学业成绩。成员访问运算符(.)可以访问那些访问修饰符非private的成员对于那些访问修饰符为private的属性,就不能直接访问信息隐藏 通过对象引用某个方法时,无论该方法是否需要传递参数,都要在调用方法名时在后面加上

4、括号,表示方法调用,4.1.2 对象的生存周期(cont.),特殊的对象创建形式int areaOfRectangle=new Rectangle(100,50).area();应该先执行new Rectangle(100,50),虚拟机会生成一个临时对象引用,然后调用该对象的area(),计算area,最终将area的值赋值给整型变量areaOfRectangle。,4.1.2 对象的生存周期(cont.),3 消亡objectReference=null;垃圾回收System.gc();,4.2 进一步了解对象,封装对象之间的关系消息、组合和聚合类,4.2 进一步了解对象(cont.),1

5、.封装对于软件世界,对象就是一个由属性集和方法集构成的独立存在。在面向对象领域中把这种构成称为封装(Encapsulation),封装技术带来的直接优势就是信息隐藏(Information-hiding)和模块化(Modularity),就是在进行设计时所追求的低耦合、高内聚。对象封装通过访问控制修饰符的限定,决定了信息的批露范围,减少了由于直接访问而造成的不当修改和引用,而且对象本身是一个独立的实体,内部的运行过程外界无法直接控制,因此模块化的程度进一步得到了提高。,4.2 进一步了解对象(cont.),2 对象之间的关系对象间的关系包括在结构上的关联和聚合,在协作上的消息传递机制关联关联关

6、系提供了给定类的对象之间的一个链接,需要相互通信的对象可以使用这种链接。对象之间的消息一般就是沿着关联关系发送的。,4.2 进一步了解对象(cont.),一个关联的例子,关联的多重性,关联是有方向性,4.2 进一步了解对象(cont.),聚合和组合 聚合则表示把对象组合在一起,变成一个更大的对象。这种包含关系就像整体和部分关系。这种包含关系可以是强的(值聚合)或弱的(引用聚合),在UML中,值聚合称为组合,而引用聚合则称为聚合。或者更简单的区别就是如果一个整体对象被删除,那么其部分对象是否也同时不再存在。,4.2 进一步了解对象(cont.),消息 消息包含了接收对象名称、要求的服务(方法名)

7、、传递的参数这些信息,消息的处理过程依赖于对象。,练习题,定义合适的对象,描述他们的属性和功能请你定义汽车对象,描述他们的属性和功能汽车和驾驶员的关系是什么?,设想一下你的超市购物经历,如果让你描述那样的环境,你会用什么样的对象来概括,请描述他们。,4.3类是对象的抽象,在Java语言中,要想表示对象,首先必须有对象所属的类存在,无论这个类是J2SDK开发包提供的、第三方提供的或者就是开发人员自己定义的。类封装了一组对象的公共属性和方法,4.3.1类的结构,一个类的定义import java.util.*;public class Student/首先定义该类对象的属性 private Str

8、ing id;private String name;/定义构造函数,一个类可以有多种构造对象的方法 public Student()./以下开始定义该类对象的方法 public void addAcademicRecord(AcademicRecord ar).,4.3.1类的结构(cont.),类的修饰符class 类名 extends 父类名 implements接口名 修饰符 类型成员变量1;修饰符 类型成员变量2;static/类初始化块 构造函数1(参数1,参数2,)函数体;构造函数2(参数1,参数2,)函数体;修饰符 类型成员方法1(参数1,参数2,)throws 异常列表 方法

9、体;修饰符 类型成员方法2(参数1,参数2,)throws 异常列表 方法体;,4.3.1类的结构(cont.),类的表示,在UML中符号,+、-分别表示public、private、protected修饰符,4.3.1类的结构(cont.),一些类声明的实例简单类class Student 可被任一其它类访问的类-publicpublic class Student 一个不可被继承的最终类-finalpublic final class Student,一个抽象的类-abstractpublic abstract class Student 一个继承了父类Student的类-extendsp

10、ublic class Postgraduate extends Student 一个继承了父类Student,并且实现了一个接口的类public class Postgraduate extends Student implements TakeTactics,4.3.3属性声明,属性用于描述对象状态 访问权限修饰符 类型 变量名;访问权限修饰符 类型 变量名=初值;访问权限修饰符 类型 变量名=初值,变量名=初值;public class Student String id;private String name;public char gender=M;private List acad

11、emicRecordList;,4.3.3属性声明(cont.),4.3.3属性声明(cont.),1 类属性和对象属性class Calendar static final int DAYS_OF_JANUARY=31;/一月的天数.static final int DAYS_OF_DECEMBER=31;/十二月的天数class Bank static final float ir_1=0.02;/一年期储蓄利率,这是类变量 String address;/因为每个银行都有自己的所在地,故是对象变量.,2 属性的访问通过成员运算符访问通过getXxx()、setXxx()方法访问示例:Pu

12、blic class Student private String name;public String getName()return this.name;public void setName(String name),4.3.3属性声明(cont.),3.访问控制范围修饰符,Java名字空间及访问规则,public:任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。protected:同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。private:不允许任何其他类存取和调用。(default,前边没有修饰字的情况):在同一程序包中出现的类才可以直

13、接使用它的数据和方法.,关于变量声明(01)只在你需要使用时,才去声明变量,不要提前声明。(02)声明变量时,需要合理地进行初始化。(03)不要在循环体内部声明变量,这样会影响效率。,4.3.4 定义方法,1 方法方法是自包含的有名代码块,并且具有可重用的特性。方法由对象通过调用方法名得到执行,一些方法有某种类型的返回值,一些没有。有返回值的方法通常在表达式中被调用,作为表达式的一部分参与运算;而没有返回值的方法通常在调用语句中被调用,使它完成某种功能。方法调用System.out.println(Welcome!);int max=Math.max(10,20);,4.3.4 定义方法(co

14、nt.),2方法声明修饰符 方法返回类型 方法名(类型 参数1,类型 参数2,)throws 异常列表 方法体;,3.方法调用调用对象方法的过程很简单,可以直接通过对象名用成员运算符来访问。没有返回值的方法调用:System.out.println(Welcome!);有返回值的方法调用:int max=0;max=Math.max(10,20);/调用比较最大值的方法,返回其中的最大值或:String age=18;int ageNum=0;ageNum=Integer.parseInt(age);/将数值字符串转换为整数,4.形参和实参某些方法在执行时,需要接收一些外部的值,对象在执行这些

15、方法时,就需要把这些值传递到方法代码中,这就需要一个传递的通道。这个通道就是利用声明方法时定义的形式参数列表,如图4-2中的定义。位于方法名后括号里的形式参数指定了执行方法需要的值的个数和类型,那么在实际执行时,就需要按照声明的要求(类型、顺序、个数)提供确定的值,这个实际执行时,传递到方法的值称为实际参数,它可以用常量表示,也可以用变量表示,变量既可以是基本类型,也可以是引用类型。,public class ParaSample public int max(int v1,int v2)return v1v2?v1:v2;public static void main(String args

16、)int x=100;ParaSample sample=new ParaSample();System.out.println(sample.max(x,90);/此处调用了对象sample的方法max,值传递和引用传递形式参数定义了接收执行时传递过来的值,但是对于基本类型和引用类型,有本质的区别。,返回值及方法类型 前面提到方法的返回值有两种类型,一种有返回值,一种没有。没有返回值的可以直接构成调用语句,如System.out.println(),而有返回值的则可以构成表达式的一部分,参与运算。一个方法如果要返回某种类型的值,可以用return语句,程序执行时,如果遇到return语句,则

17、无条件退出当前的执行过程,返回上级调用点,或者该程序运行结束。return 表达式;Return;,4.3.4 定义方法(cont.),类方法和成员方法类似于变量,方法基于是否有static修饰也可以分为类方法和对象方法(实例方法)。访问时,类方法可以直接通过类名来引用,而实例方法必须通过对象名来访问,也就是说要想使用实例方法,首先要创建一个该类的对象才行。,由于类方法是属于整个类的,并不属于类的哪个对象,所类方法的方法体中不能有与类的对象有关的内容。即类方法体有以下限制,如果违反这些限制,就会导致程序编译错误。类方法中不能引用对象变量;类方法中不能调用类的对象方法;在类方法中不能使用supe

18、r、this关键字。而对象的方法,则必须首先创建对象实例,然后才能使用,例如:Student student=new Student(0607102);/根据学号创建实例student.showAcademicRecord();/显示学号为0607102的成绩单而和类方法相比,对象方法则几乎没有什么限制:(1)对象方法中可以引用对象变量,也可以引用类变量;(2)对象方法中可以调用类方法;(3)对象方法中可以使用super、this关键字。,4.3.4 定义方法(cont.),方法重载(OverLoadding)方法的名称、形式参数的类型和次序、个数形成了方法的签名特征,一个类中不允许出现签名完

19、全相同的方法声明。例如:System.out.println(Welcome!);/输出一个字符串System.out.println(intNumber);/输出一个整数System.out.println(floatNumber);/输出一个单精度实数 System.out.println(student);/输出一个student对象,练习题,定义合适的类,描述他的属性和功能请你定义汽车类,描述他的属性和功能设想一下你的超市购物经历,如果让你描述那样的环境,你会用什么样的对象来概括,轻描述他们。,4.3.5 对象构造,1 构造函数构造函数有两个特征区别于方法:构造函数从无返回值,不可以为

20、其指定任何类型的返回值,包括void。构造函数的名称总是和类名保持完全一致。2 默认的构造函数当一个类没有明确的构造函数Student student=new Student();3 使用构造函数 创建对象,如 new ParaSample()、new Integer(5)。在构造函数的函数体的第一条语句,可以调用同类中的另一个构造函数或者是父类的构造函数,其它语句不可使用,4.4类和对象的使用,1 创建对象利用new运算符创建student=new Student(0625001);利用类本身提供的方法Calendar today=Calendar.getInstance();,4.4类和对

21、象的使用(cont.),this每个类可以创造多个对象,每个对象都拥有一个this变量指向自己,供自己的方法内部代码中使用,可以通过this,获得当前对象的属性值,也可以调用自身对象的其它方法,4.4类和对象的使用(cont.),Static的作用共享数据共享操作类初始化,共享数据public class MathUtil/定义了一个类静态常量PIpublic static final double PI=3.1415926;这个PI被static修饰后,要想使用,必须通过类名.静态成员变量名这种方法使用。其它例子如前面程序经常使用的System.out.println(),out是Syste

22、m类的一个静态成员,其类型是PrintStream,所以就通过类名System就直接引用了。再比如,Integer.MAX_VALUE则表示的是一个整型类能够表示的最大数。,共享操作在前面的程序中,读者已经熟悉了经常出现在类中的main方法,根据前面对方法修饰符的定义,static表示修饰的方法是一个属于类所有的方法,可以通过类名.方法名()来调用。之所以规定如此的特性,是因为在实际中某些对象所应具备的能力不因对象的改变而改变,而是按照一个所有该类对象均应遵循的规则来执行,如三角函数的计算、字符串的处理等,把这些能力定义到每个对象中没有必要,所以就出现了应把它们归属为类所有,由所有对象共享。,

23、类初始化在讲构造函数的时候,提到构造函数通常是对象在被创建时执行某些初始化的工作,那么,类在初次加载到内存的时候,如果希望也能执行一些初始化的工作,应该如何实现呢?答案就是:应该把类加载时执行的代码放在初始化块中。在Java中,初始化块是放在一个如下格式的大括号()中:static 它在类体当中存在的位置是独立的,可以放在任何合适的位置。这个初始化块和构造函数不一样的地方是它没有函数名,也没有访问控制修饰符,只有一个static来表明它的作用。而且,该初始化块只是在类加载时被执行一次,而且只被执行一次。其代码执行优先于对象创建。,4.4类和对象的使用(cont.),对象消亡处理-finaliz

24、e()protected void finalize()/*此处可放有关该对象被删除时刻,应该执行的代码。*例如连接池对象在释放时,应该检查所有的连接是否已经关闭等。*/,实例运算符instanceof public class TestInstanceof public static void main(String args)Student student=new Student();/判断student是否是Student的实例boolean res=student instanceof Student;if(res)/如果是Student类型else/如果不是Student类型,4.5

25、变量作用域,课堂练习,类和对象的区别构造函数和普通方法的区别是什么方法的签名包含哪些内容重载的特征是什么值传递和引用传递的区别是什么,public class Foo int i;static String s;void imethod()static void smethod()设f是Foo的一个实例,则下述语句正确吗?System.out.println(f.i);System.out.println(f.s);f.imethod();f.smethod();System.out.println(Foo.i);System.out.println(Foo.s);Foo.imethod();

26、Foo.smethod();,类之间的关系有聚合、关联等类型,请画出下面类之间的关系。公司和雇员课程和师资房子和窗户书架和书,写一个名为Rectangle的类表示矩形,有两个属性width和height和颜色color,width和height是double型的,而color是String型的,假定所有矩形颜色相同。要求提供属性访问方法和一个计算矩形面积的方法getArea()的方法,通过构造函数提供width和height值。写一个程序测试该类,验证面积计算方法的正确性。,一个Fan有自己的品牌和型号,其功能有start,stop,speed,start和stop可以改变Fan的状态stat

27、us(on/off),speed可以调整Fan的速度(档级在0、1、2、3),请分析并提供一个类的定义。,4.6 包,包是有着唯一命名的类的集合,它将开发者认为相关的类分组管理,实际上Java中所有的类都在一个具体的包中。在逻辑上,包就是把相关的类组合在一起管理。在物理上,包就是目录,相关的类归类放在某个目录下。,例如:,在jdk软件包中,如日期类、格式化类等都在java.util包下,而基本语言类都在java.lang下,输入输出类都在java.io下。一般项目中公用类库,可以放在mon下,com通常代表公司,common代表公共类,这是两级目录,com是一级,common是第二级。,一个开

28、发假定:,操作系统:windows系列源程序所在位置:D:javademosrc(注:此目录将被称为源程序根目录-)class文件所在根位置D:javademoclasses1.创建包 创建包就是在根目录下根据包的层次,逐级创建子目录。如假定我们准备把一个类Student放在my.school下,你应该如此做:在D:javademosrc目录下,创建子目录my在子目录my下,创建子目录school,2.将类放在指定目录下将类Student放在子目录school下Student类的第一行语句必须是package my.schoolpackage my.school;public class St

29、udent 将PostGraduate类放在my目录下package my;import my.school.Student;public class PostGraduate extends Student,3.访问其它包内的类一个类如果不希望被包外的其他类所访问,就不要在声明class的时候加上public修饰如果在一个类中需要引用其它包内可见类,就需要在一个类的声明之前,包的声明之后的中间位置导入该类,如PostGraduate类导入Student类:import my.school.Student;或者import my.school.*;引用处在一个包内的类无须导入引用java.la

30、ng包无须导入,4.编译包D:javademosrcjavac-d d:javademoclasses my/PostGraduate.javaD:javademosrcjavac-d d:javademoclasses my/*.java命令中的-d d:javademoclasses这部分表示将编译后的字节码文件按照包的路径放在以javademoclasses作为根目录的路径下。命令中的my/PostGraduate.java则表示编译指定的文件,由于PostGraduate.java文件中引用了其它的同一包内的类,所以编译器将关联类也直接进行了编译,如果同一个目录下的类和同目录下的其它类

31、没有任何引用关系,则不会被编译。在编译的时候需要注意的是某些类中可能引用了不在同一个包中的其它类,那么就需要告诉编译器到哪里去找这些类,这涉及到Java的环境设置的问题。,5.打包jar-cvf javademo.jar.jar-是JDK所提供的一个可执行程序,可对文件进行打包c-创建新的存档v-生成详细输出到标准输出上f-指定存档文件名javademo.jar-针对f参数,为产生的压缩文件起的文件名.-表示要缩包内的目录结构以当前目录为根目录,把根目录下的文件和子目录下的文件(递归处理)打包到指定文件中。上面的命令就会产生一个压缩包形式的类库,名字叫做javademo.jar。,6.JDK中提供的包,课堂练习,一个音像商店有两类业务,出租或销售电影光盘。如果商店主人希望建立一个系统,登记每个影片的情况,他希望系统能够立即回答关于某个电影的库存以及可供出租的光盘总数,并且他也希望能够记录租用的情况。进一步的,商店主人希望能够对出租客户的信息进行管理,系统能够提供出租即将到期的客户,也能够提供一份客户租用统计表。请就本问题中的电影和光盘分别建模,并考虑他们之间的关系。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号