Java类与对象基本概念.ppt
《Java类与对象基本概念.ppt》由会员分享,可在线阅读,更多相关《Java类与对象基本概念.ppt(124页珍藏版)》请在三一办公上搜索。
1、第二章类与对象的基本概念,1,2,本章内容面向对象程序设计的基本概念和思想Java 类与对象的基本概念和语法,包括类的声明、类成员的访问,以及对象的构造、初始化和回收本章要求理解类和对象的概念熟练使用类及其成员的访问控制方法熟练掌握各种构造方法了解java的垃圾回收机制,2.1 面向对象的程序设计方法概述,面向对象的程序设计(Object Oriented Programming,简称OOP)与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向涉及的主要概念抽象(abstraction)封装(encapsulation)继承(inheritance)多态(pol
2、ymorphism),3,2.1 面向对象的程序设计方法概述(续),对象现实世界中万物皆对象都具有各自的属性,对外界都呈现各自的行为 程序中一切都是对象都具有标识(identity),属性和行为(方法)通过一个或多个变量来保存其状态通过方法(method)实现他的行为,4,2.1 面向对象的程序设计方法概述(续),类将属性及行为相同或相似的对象归为一类类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为在面向对象的程序设计中,每一个对象都属于某个特定的类,5,2.1 面向对象的程序设计方法概述(续),结构化程序设计通常由若干个程序模块组成,每个程序模块都可以是子程序或函数数据和功能分离
3、,代码难于维护和复用面向对象程序设计基本组成单位是类程序在运行时由类生成对象,对象是面向对象程序的核心对象之间通过发送消息进行通信,互相协作完成相应功能,6,2.1.1 抽象,计算机软件开发中所使用的抽象有过程抽象数据抽象,7,2.1.1 抽象(续),数据抽象将需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型每个抽象数据类型既包含了数据,也包含了针对这些数据的操作相对于过程抽象,数据抽象是更为合理的抽象方法,8,2.1.1 抽象(续),例:钟表数据(属性)int Hour;int Minute;int Second;方法(行为)SetTime();ShowTime();,9
4、,2.1.1 抽象(续),例:人数据(属性)Char name;char gender;int age;int id;方法(行为)生物行为Eat(),Sleep(),社会行为Work(),Study(),10,2.1.2 封装,封装是一种信息隐蔽技术利用抽象数据类型将数据和基于数据的操作封装在一起用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象,11,2.1.2 封装(续),封装的定义清楚的边界所有对象的内部信息被限定在这个边界内接口对象向外界提供的方法,外界可以通过这些方法与
5、对象进行交互受保护的内部实现功能的实现细节,不能从类外访问。,12,2.1.2 封装(续),封装的意义在面向对象的程序设计中,类封装了数据及对数据的操作,是程序中的最小模块禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,这使得模块之间的偶合度大大降低保证了模块具有较好的独立性,程序维护和修改较为容易,13,2.1.3 继承,继承是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)在继承过程中派生类继承了基类的特性,包括方法和实例变量派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要有助于解决软件的可重用性问题,
6、使程序结构清晰,降低了编码和维护的工作量,14,2.1.3 继承(续),单继承任何一个派生类都只有单一的直接父类类层次结构为树状结构多继承一个类可以有一个以上的直接父类类层次结构为网状结构,设计及实现比较复杂Java语言仅支持单继承,15,2.1.4 多态,多态一个程序中同名的不同方法共存主要通过子类对父类方法的覆盖来实现不同类的对象可以响应同名的消息(方法),具体的实现方法却不同使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题,16,2.2 类与对象,类与对象在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)一个类是对一类对象的
7、描述。类是构造对象的模板对象是类的具体实例,17,2.2.1 类的声明,声明形式public abstract|final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化;方法声明及方法体;,18,2.2.1 类的声明(续),关键字class表明其后声明的是一个类。extends如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后implements如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后,19,public abstract|final class 类名称 extends 父类
8、名称 implements 接口名称列表,2.2.1 类的声明(续),修饰符可以有多个,用来限定类的使用方式public 表明此类为公有类abstract 指明此类为抽象类final 指明此类为终结类 类声明体变量成员声明及初始化:可以有多个方法声明及方法体:可以有多个,20,public abstract|final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化;方法声明及方法体;,2.2.1 类的声明(续),例2_1:钟表类public class Clock/成员变量 int hour;int minute;int second;
9、/成员方法 public void setTime(int newH,int newM,int newS)hour=newH;minute=newM;second=newS;public void showTime()System.out.println(hour+:+minute+:+second);,21,2.2.2 对象的声明与引用,变量和对象变量除了存储基本数据类型的数据,还能存储对象的引用,用来存储对象引用的变量称为引用变量类的对象也称为类的实例,22,2.2.2 对象的声明与引用(续),对象的声明格式类名 变量名 例如Clock是已经声明的类名,则下面语句声明的变量aclock将用
10、于存储该类对象的引用:Clock aclock;声明一个引用变量时并没有对象生成,23,2.2.2 对象的声明与引用(续),对象的创建生成实例的格式:new()例如:aclock=new Clock();其作用是:在内存中为此对象分配内存空间返回对象的引用(reference,相当于对象的存储地址)引用变量可以被赋以空值例如:aclock=null;,24,2.2.3 数据成员,数据成员表示Java类的状态声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)分为实例变量和类变量,25
11、,2.2.3 数据成员(续),声明格式public|protected|private staticfinaltransient volatile变量数据类型 变量名1=变量初值,变量名2=变量初值,;格式说明public、protected、private 为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量,26,2.2.3 数据成员(续),实例变量没有static修饰的变量称为实例变量(Instance Variables)用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同可通
12、过下面的表达式访问实例属性的值.,27,2.2.3 数据成员(续),class Circle int radius;public class ShapeTester public static void main(String args)Circle x;x=new Circle();System.out.println(x);System.out.println(radius=+x.radius);,28,例2_2:,声明一个表示圆的类,保存在文件Circle.java 中。然后编写测试类,保存在文件ShapeTester.java中,并与Circle.java放在相同的目录下。,2.2.3
13、 数据成员(续),编译后运行结果如下:Circle26b249radius=0解释之后的数值为x所指的对象的存储地址x的值及对象的状态如图,29,例2_2运行结果,2.2.3 数据成员(续),public class Rectangle double width=10.128;double height=5.734;public class ShapeTester public static void main(String args)Circle x;Rectangle y;x=new Circle();y=new Rectangle();System.out.println(x+y);,3
14、0,例2_3:,声明一个表示矩形的类,保存在Rectangle.java中;编写测试类,保存在ShapeTester.java中,文件保存在相同的目录下,2.2.3 数据成员(续),编译后运行结果如下:Circle82f0db Rectangle92d342解释Circle及Rectangle类对象的状态如图,31,例2_3运行结果,2.2.3 数据成员(续),对ShapeTester类进行修改,使两个实例具有不同的实例变量值public class ShapeTester public static void main(String args)Circle x;Rectangle y,z;x
15、=new Circle();y=new Rectangle();z=new Rectangle();x.radius=50;z.width=68.94;z.height=47.54;System.out.println(x.radius+“,+y.width+“,+z.width);,32,例2_3修改,2.2.3 数据成员(续),编译后运行结果如下:50,10.128,68.94解释Circle及Rectangle类对象的状态如图,33,修改后运行结果,2.2.3 数据成员(续),地址簿程序一个人的地址通常包括以下信息:姓名,省份,城市,街道,门牌号,邮政编码,34,例2_4,2.2.3 数
16、据成员(续),public static void main(String args)String name1,name2;int gateNumber1,gateNumber2;String streetName1,streetName2;String city1,city2;String province1,province2;String postalCode1,postalCode2;name1=Zhang Li;gateNumber1=15;streetName1=Tsinghua East Road;city1=Beijing;province1=“Beijing;postalCo
17、de1=100084;name2=Li Hong;gateNumber2=2;streetName2=BeiNong;city2=Beijing;province2=Beijing;postalCode2=102206;/.do something interesting,35,采用过程化的程序设计方法,使用简单变量存储,则存储两个人地址的代码如下:,2.2.3 数据成员(续),采用面向对象的程序设计方法,则需要首先声明Address类如下public class Address String name;int gateNumber;String streetName;String city;
18、String province;String postalCode;/方法成员略,36,2.2.3 数据成员(续),主方法改写如下public static void main(String args)Address address1=new Address(),address2=new Address();address1.name=“Zhang Li;address1.streetNumber=15;address1.streetName=“Tsinghua East Road;address1.city=“Beijing;address1.province=“Beijing;addres
19、s1.postalCode=“100084;address2.name=“Li Hong;address2.streetNumber=2;address2.streetName=“BeiNong;address2.city=“Beijing;address2.province=“Beijing;address2.postalCode=“102206;/.do something interesting,37,2.2.3 数据成员(续),类变量也称为静态变量,声明时需加static修饰符不管类的对象有多少,类变量只存在一份,在整个类中只有一个值类初始化的同时就被赋值适用情况类中所有对象都相同的属
20、性经常需要共享的数据系统中用到的一些常量值引用格式.,38,2.2.3 数据成员(续),对于一个圆类的所有对象,计算圆的面积时,都需用到的值,可在Circle类的声明中增加一个类属性PI。public class Circle static double PI=3.14159265;int radius;当我们生成Circle类的实例时,在每一个实例中并没有存储PI的值,PI的值存储在类中。,39,例2_5:,2.2.3 数据成员(续),对类变量进行测试public class ClassVariableTester public static void main(String args)Ci
21、rcle x=new Circle();System.out.println(x.PI);System.out.println(Circle.PI);Circle.PI=3.14;System.out.println(x.PI);System.out.println(Circle.PI);测试结果3.141592653.141592653.143.14,40,例2_5:,2.2.3 数据成员(续),声明一个Point类,有两个私有变量保存点坐标,一个类变量保存已有点的个数public class Point private int x;private int y;public static i
22、nt pointCount=0;public Point(int x,int y)this.x=x;this.y=y;pointCount+;,41,练习:Point.java,2.2.3 数据成员(续),Point类测试class ex2_4 public static void main(String args)Point p=new Point(1,1);System.out.println(p.pointCount);Point q=new Point(2,2);System.out.println(q.pointCount);System.out.println(q.pointCou
23、nt=Point.pointCount);System.out.println(Point.pointCount);,42,2.2.3 数据成员(续),Point类测试结果12true2,43,2.2.3 数据成员(续),final修饰符实例变量和类变量都可被声明为finalfinal实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化final类变量必须在声明的同时初始化,44,2.2.4 方法成员,方法成员定义类的行为一个对象能够做的事情我们能够从一个对象取得的信息可以没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分分为实例方法和类方法,45,2.2.4 方
24、法成员(续),声明格式public|protected|private static finalabstract native synchronized返回类型 方法名(参数列表)throws exceptionList方法体,46,2.2.4 方法成员(续),格式说明方法修饰public、protected、private 为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问,47,public|protected|priv
25、ate static finalabstract native synchronized 返回类型 方法名(参数列表)throws exceptionList 方法体,2.2.4 方法成员(续),格式说明(续)返回类型方法返回值的类型,可以是任意的Java数据类型当不需要返回值时,返回类型为void参数类型简单数据类型,引用类型(数组、类或接口)可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数方法体方法的实现包括局部变量的声明以及所有合法的Java指令局部变量的作用域只在该方法内部throws exceptionList用来处理异常,48,2.2.4 方法成员(续),方法调用给对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 对象 基本概念
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6510093.html