第07章对象和类

上传人:博****1 文档编号:592093046 上传时间:2024-09-19 格式:PPT 页数:32 大小:191.50KB
返回 下载 相关 举报
第07章对象和类_第1页
第1页 / 共32页
第07章对象和类_第2页
第2页 / 共32页
第07章对象和类_第3页
第3页 / 共32页
第07章对象和类_第4页
第4页 / 共32页
第07章对象和类_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《第07章对象和类》由会员分享,可在线阅读,更多相关《第07章对象和类(32页珍藏版)》请在金锄头文库上搜索。

1、主讲教师主讲教师: 丁月华丁月华 Email:ding_7第7章 对象和类7-2 WHPU n7.1 引言(自学)引言(自学)n7.2 定义对象的类定义对象的类(讲解)讲解)n7.3 构造方法(讲解)构造方法(讲解)n7.4 构造引用变量来访问对象(讲解)构造引用变量来访问对象(讲解)n7.5 使用使用java类库中的类(自学)类库中的类(自学)n7.6 静态变量、常量和静态方法(讲解)静态变量、常量和静态方法(讲解)n7.7 可见性修饰符(讲解)可见性修饰符(讲解)n7.8 数据域封装(讲解)数据域封装(讲解)n7.9 不可变对象和类(自学)不可变对象和类(自学)n7.10 给方法传递对象参

2、数(讲解)给方法传递对象参数(讲解)n7.11 变量的作用域变量的作用域 (讲解)(讲解)n7.12 关键字关键字this (讲解)(讲解)n7.13对象数组(讲解)对象数组(讲解)n7.14 类的抽象和封装类的抽象和封装n7.157.17 实例学习:贷款类实例学习:贷款类Loan、Course、StackOfIntegersn7.18 创建窗口(讲解)创建窗口(讲解)7-3 WHPU 7.2 定义对象的类(自学)n类:是一个数据结构,其中包括一组数据和操作这组类:是一个数据结构,其中包括一组数据和操作这组 数据的方法。是创建对象的蓝本或模板。数据的方法。是创建对象的蓝本或模板。n对象:是类的

3、一个具体的实例。创建类的对象叫类的实对象:是类的一个具体的实例。创建类的对象叫类的实例化。(见例化。(见P169图图7-1)n对象的要素:对象的要素:l状态(数据成员):具有当前值的数据域的集合构成状态(数据成员):具有当前值的数据域的集合构成l行为(函数成员):方法的集合定义行为(函数成员):方法的集合定义7-4 WHPU Java中中 类定义的一般格式为:类定义的一般格式为:修饰词修饰词 class 类名类名 extends 父类名父类名修饰词修饰词 类型类型 成员变量成员变量1名名;.修饰词修饰词 类型类型 成员变量成员变量n名名;修饰词修饰词 类型类型 成员方法成员方法1名(参数列表名

4、(参数列表1)类型类型 局部变量局部变量1名名;.类型类型 局部变量局部变量i1名名;.(方法体)(方法体).修饰词修饰词 类型类型 成员方法成员方法m名(参数列表名(参数列表m)类型类型 局部变量局部变量1名名;.类型类型 局部变量局部变量km名名; .(方法体)(方法体) 成员变量(属性)成员方法1成员方法m类类的定义1局部变量局部变量局部变量局部变量类由类由成员变量成员变量或或成员方法成员方法或或二者二者组成。组成。 成员方法可以没成员方法可以没有局部变量,没有局部变量,没有方法体,或二有方法体,或二者都没有(抽象者都没有(抽象方法)。方法)。 成员变量的有成员变量的有效范围为整个类效范

5、围为整个类(的实例)。(的实例)。 局部变量的有局部变量的有效范围为它所在效范围为它所在的方法。的方法。 在方法体中,在方法体中,若局部变量与成若局部变量与成员变量同名,成员变量同名,成员变量将被同名员变量将被同名的局部变量屏蔽。的局部变量屏蔽。7-5 WHPU 7.3 构造方法n功能:调用可以创建新对象,一种特殊方法功能:调用可以创建新对象,一种特殊方法n定义构造方法特征:定义构造方法特征:l构造方法与类名完全相同构造方法与类名完全相同l无返回值类型无返回值类型l可以重载可以重载n调用构造方法:调用构造方法:new 类名(参数)类名(参数)n构造方法与一般方法的区别:见书构造方法与一般方法的

6、区别:见书P1707-6 WHPU 7.4 构造引用变量来访问对象n7.4.1 引用变量和引用类型引用变量和引用类型l核心:核心:java中是通过对象引用(中是通过对象引用(Reference variable)来)来访问访问 eg: Circle mycircle = new Circle();类所定义的类型称为引用类型,上例中类所定义的类型称为引用类型,上例中mycircle是引用类型是引用类型对象通过对象引用变量来访问,上例中一个对象通过对象引用变量来访问,上例中一个Circle对象通过对象通过mycircle来访问来访问7-7 WHPU 7.4 构造引用变量来访问对象n7.4.2 访问

7、对象数据和方法:访问对象数据和方法:l采用对象成员引用运算符(采用对象成员引用运算符(.)objectRefVar.dataobjectRefVar.methodName(arguments) eg: Circle mycircle = new Circle(); mycircle.raidus ,实例方法,实例方法 mycircle.getArea(),实例对象,实例对象7-8 WHPU 7.4 构造引用变量来访问对象(实例7-1)myCircle public class TestCircle1 public static void main(String args) Circle1 my

8、Circle = new Circle1(5.0);System.out.println(The area of the circle of radius + myCircle.radius + is + myCircle.getArea();Circle1 yourCircle = new Circle1();System.out.println(The area of the circle of radius + yourCircle.radius + is + yourCircle.getArea();yourCircle.radius = 100;System.out.println(

9、The area of the circle of radius + yourCircle.radius + is + yourCircle.getArea(); class Circle1 double radius;Circle1() radius = 1.0; Circle1(double newRadius) radius = newRadius; double getArea() return radius * radius * Math.PI; 7-9 WHPU 实例 7-1 小结n对于一个文件中还有多个类的情况下,称含有对于一个文件中还有多个类的情况下,称含有main函数的类为主

10、类。主类与文件名同名,只能是主类函数的类为主类。主类与文件名同名,只能是主类为公有类型为公有类型n定义在一个文件中的不同类,最后生成各自独立的定义在一个文件中的不同类,最后生成各自独立的class文件文件7-10 WHPU 7.4 构造引用变量来访问对象(实例7-2)Create an objectpublic class Circle1 public static void main(String args) Circle1 myCircle = new Circle1(5.0); System.out.println(The area of the circle of radius + m

11、yCircle.radius + is + myCircle.getArea(); Circle1 yourCircle = new Circle1(); System.out.println(The area of the circle of radius + yourCircle.radius + is + yourCircle.getArea();yourCircle.radius = 100;System.out.println(The area of the circle of radius + yourCircle.radius + is + yourCircle.getArea(

12、); double radius; Circle1() radius = 1.0; Circle1(double newRadius) radius = newRadius; double getArea() return radius * radius * Math.PI; 7-11 WHPU 7.4 构造引用变量来访问对象n7.4.5 基本数据类型变量和引用类型变量的区别基本数据类型变量和引用类型变量的区别l引用类型变量:值是对象的存储地址引用类型变量:值是对象的存储地址l基本数据类型变量:对应内存存储的值是基本数据类型基本数据类型变量:对应内存存储的值是基本数据类型7-12 WHPU 7

13、.5 使用java类库中的类(自学)nDate类:提供了与系统无关的日期和时间封装包类:提供了与系统无关的日期和时间封装包nRandom类:生成类:生成0.0.1.0)之间的随机双精度浮点数之间的随机双精度浮点数7-13 WHPU 7.6 静态变量、常量和静态方法n静态变量:需要让一个类中的所有实例共享数据静态变量:需要让一个类中的所有实例共享数据n静态方法:无需创建类的实例就可以调用静态方法:无需创建类的实例就可以调用n静态常量:类中的常量被所有对象所共享,声明为静态常量:类中的常量被所有对象所共享,声明为final static7-14 WHPU 7.6 静态变量、常量和静态方法 (实例)

14、7-3,7-4public class TestCircle2 public static void main(String args) Circle2 c1 = new Circle2(); System.out.println(Before creating c2); System.out.println(c1 is : radius ( + c1.radius + ) and number of Circle objects ( + c1.numberOfObjects + ); Circle2 c2 = new Circle2(5); c1.radius = 9;System.out.

15、println(nAfter creating c2 and modifying + c1s radius to 9);System.out.println(c1 is : radius ( +c1.radius + ) and number of Circle objects ( + c1.numberOfObjects + );System.out.println(c2 is : radius ( + c2.radius + ) and number of Circle objects ( + c2.numberOfObjects + ); public class Circle2 dou

16、ble radius;static int numberOfObjects = 0;Circle2() radius = 1.0; numberOfObjects+; Circle2(double newRadius) radius = newRadius; numberOfObjects+; static int getNumberOfObjects() return numberOfObjects; double getArea() return radius * radius * Math.PI; 7-15 WHPU 7.7 可见性修饰符(重要)npublic:类、方法和数据域在任何类中

17、可访问:类、方法和数据域在任何类中可访问nprotected : 保护的成员变量,保护的成员变量, 只能被它所在类及只能被它所在类及其子类和相同包中的其它类访问。其子类和相同包中的其它类访问。n默认:默认: 如果上述三个修饰字都没有,默认情况下,如果上述三个修饰字都没有,默认情况下,类、方法和数据可以从同一个包中的任何类访问,类、方法和数据可以从同一个包中的任何类访问,称为称为包私有包私有(package-private)。nprivate:使得方法和数据域只能从自身所在的类中:使得方法和数据域只能从自身所在的类中访问访问n详细见详细见P180 、P2557-16 WHPU n作用域符号对于成

18、员的影响作用域符号对于成员的影响n作用域符号对于类的访问控制影响作用域符号对于类的访问控制影响7-17 WHPU 7.8 数据域封装(getter & setter)n访问器访问器(读取器读取器):读取对象中私有的和受保护的数:读取对象中私有的和受保护的数据成员。据成员。lget签名:签名: public 返回值类型返回值类型 get属性名()属性名()n修改器修改器(设置器设置器):修改对象中私有的和受保护的数:修改对象中私有的和受保护的数据成员。据成员。lset签名:签名: public void set属性名(数据类型属性名(数据类型 属性值)属性值) 。7-18 WHPU 7.8 数据

19、域封装(getter & setter) 实例7-5/Circle3.javapublic class Circle3 private double radius = 1; private static int numberOfObjects = 0; public Circle3() numberOfObjects+; public Circle3(double newRadius) radius = newRadius; numberOfObjects+; public double getRadius() return radius; public void setRadius(doub

20、le newRadius) radius = (newRadius = 0) ? newRadius : 0; public static int getNumberOfObjects() return numberOfObjects; public double getArea() return radius * radius * Math.PI; / TestCircle3.java: public class TestCircle3 public static void main(String args) Circle3 myCircle = new Circle3(5.0); Syst

21、em.out.println(The area of the circle of radius + myCircle.getRadius() + is + myCircle.getArea(); myCircle.setRadius(myCircle.getRadius() * 1.1); System.out.println(The area of the circle of radius + myCircle.getRadius() + is + myCircle.getArea(); 7-19 WHPU 7.10 给方法传递对象参数(实例7-6)nJava的唯一参数传递方式:值传递的唯一

22、参数传递方式:值传递n本质:传递对象就是传递对象的引用,即把实参的本质:传递对象就是传递对象的引用,即把实参的引用(地址)传递给型参;引用(地址)传递给型参;n结果:如果在方法中修改形参对象的值,方法外的结果:如果在方法中修改形参对象的值,方法外的实参对象也会被修改实参对象也会被修改7-20 WHPU 7.10 给方法传递对象参数 实例7-6public class TestPassObject public static void main(String args) Circle myCircle = new Circle(); int n = 5; printAreas(myCircle,

23、 n); System.out.println(n + Radius is + myCircle.getRadius(); System.out.println(n is + n); public static void printAreas(Circle c, int times) System.out.println(Radius ttArea); while (times = 1) System.out.println(c.getRadius() + tt + c.findArea(); c.setRadius(c.getRadius() + 1); times-; 7-21 WHPU

24、55传递基本类型变量传递基本类型变量引用引用myCircle:Circleradius=1传递对象的引用变量传递对象的引用变量myCirclec7-22 WHPU 7.11 变量的作用域(在类中,自学)n类属变量:类的实例变量和静态变量,申明顺序一类属变量:类的实例变量和静态变量,申明顺序一般不限,只能声明一次般不限,只能声明一次n局部变量:定义在方法中的内部变量局部变量:定义在方法中的内部变量n原则:局部变量优先,同名类属变量被屏蔽原则:局部变量优先,同名类属变量被屏蔽7-23 WHPU 7.12 关键字thisn是对当前对象的引用,代表当前对象。是对当前对象的引用,代表当前对象。n本质:事

25、实上本质:事实上this是编译器为每个实例方法加上的是编译器为每个实例方法加上的第一个隐含的参数,为了区别到底是哪个对象调用第一个隐含的参数,为了区别到底是哪个对象调用了该实例方法。了该实例方法。n特征:特征:只能出现在类的实例方法中,只能出现在类的实例方法中, this不能出现不能出现在静态方法中在静态方法中。因为静态方法不依赖于类的实例而。因为静态方法不依赖于类的实例而存在,可以通过类名直接调用,这时,可能还没有存在,可以通过类名直接调用,这时,可能还没有创建该类的任何实例(对象)。创建该类的任何实例(对象)。n使用使用this的方式的方式l在类的实例方法中可以通过以下格式访问成员变量:在

26、类的实例方法中可以通过以下格式访问成员变量: this.成员变量名成员变量名l也可以通过也可以通过this来调用类中的另外构造方法来调用类中的另外构造方法7-24 WHPU class Circle private double radius; /私有的数据成员私有的数据成员 private static int numOfObject=0; public Circle() this(1.0); /radius=1.0; public Circle(double radius) this.radius = radius; this.numOfObject+; public static int

27、 getnumOfObject() return numOfObject; public double getRadius() return this.radius; public void setRadius(double r) this.radius=r; public double findArea() return this.radius*this.radius*3.14159; 7-25 WHPU 7.13 对象数组n本质:对象数组是引用变量的数组,也就是数组中本质:对象数组是引用变量的数组,也就是数组中存放的都是一系列对象的地址,通过数组名存放的都是一系列对象的地址,通过数组名下标

28、下标获得对每个对象的访问。获得对每个对象的访问。n创建对象数组时:创建对象数组时:l 第一步、要创建数组对象。第一步、要创建数组对象。 语法:语法: 类名类名 数组名数组名=new 类名类名元素个数元素个数; 例如:例如: Circle circleArray=new Circle10 ;l 第二步、逐一创建数组中的元素对象。第二步、逐一创建数组中的元素对象。 例如:例如: for(int i=0; icircleArray.length; i+) circleArrayi=new Circle(); l此时才能使用该对象数组。此时才能使用该对象数组。7-26 WHPU 内存地址内存地址len

29、gthnullnullnullnullnullnullnullnullnullcircleArraynullcircleArray0circleArray1circleArray2circleArray3circleArray4circleArray5circleArray6circleArray7circleArray8circleArray9语句语句Circle circleArray=new Circle10 ;执行后的内存状态执行后的内存状态7-27 WHPU 内存地址内存地址length内存地址内存地址内存地址内存地址内存地址内存地址内存地址内存地址内存地址内存地址内存地址内存地址内

30、存地址内存地址内存地址内存地址内存地址内存地址circleArray内存地址内存地址circleArray0circleArray1circleArray2circleArray3circleArray4circleArray5circleArray6circleArray7circleArray8circleArray9radius=0radius=0radius=0radius=0radius=0radius=0radius=0radius=0radius=0radius=0语句语句 for(int i=0; icircleArray.length; i+) circleArrayi=ne

31、w Circle(); 执行后的内存状态执行后的内存状态7-28 WHPU public class TotalArea public static void main(String args) Circle3 circleArray; circleArray = createCircleArray(); printCircleArray(circleArray); public static Circle3 createCircleArray() Circle3 circleArray = new Circle310; for (int i = 0; i circleArray.length

32、; i+) circleArrayi = new Circle3(Math.random() * 100); / Return Circle array return circleArray; public static void printCircleArray (Circle3 circleArray) System.out.println(Radiustttt + Area); for (int i = 0; i circleArray.length; i+) System.out.print(circleArrayi.getRadius() + tt + circleArrayi.ge

33、tArea() + n); System.out.println(-); System.out.println(The total areas of circles is t + sum(circleArray); public static double sum(Circle3 circleArray) double sum = 0;for (int i = 0; i circleArray.length; i+) sum += circleArrayi.getArea(); return sum; 7-29 WHPU 7.16 实例学习: 课程类CoursenCourse类:类:l功能:能

34、够完成添加学生,返回学生总数功能:能够完成添加学生,返回学生总数l数据:课程名称、学生总数数据:课程名称、学生总数public class Course private String name; private String students = new String100; private int numberOfStudents; public Course(String name) this.name = name; public void addStudent(String student) studentsnumberOfStudents = student; numberOfStu

35、dents+; public String getStudents() return students; public int getNumberOfStudents() return numberOfStudents; public String getName() return name; 7-30 WHPU 7.16 实例学习: 课程类Coursepublic class TestCourse public static void main(String args) Course course1 = new Course(Data Structures); Course course2

36、= new Course(Database Systems); course1.addStudent(Peter Jones); course1.addStudent(Brian Smith); course1.addStudent(Anne Kennedy); course2.addStudent(Peter Jones); course2.addStudent(Steve Smith); System.out.println(Number of students in course1: + course1.getNumberOfStudents(); String students = c

37、ourse1.getStudents(); for (int i = 0; i course1.getNumberOfStudents(); i+) System.out.print(studentsi + , ); System.out.println(); System.out.print(Number of students in course2: + course2.getNumberOfStudents(); 7-31 WHPU 7.18 创建窗口import javax.swing.JFrame;public class TestFrame public static void m

38、ain(String args) JFrame frame1 = new JFrame(); frame1.setTitle(Window 1); frame1.setSize(200, 150); frame1.setLocation(200, 100); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle(Window 2); frame2.setSize(200, 150); frame2.setLocation(410, 100); frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame2.setVisible(true); 7-32 WHPU 结束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号