《Java程序设计课件:第7章 对象和类》由会员分享,可在线阅读,更多相关《Java程序设计课件:第7章 对象和类(49页珍藏版)》请在金锄头文库上搜索。
1、第第第第7 7章章章章 对象和类对象和类对象和类对象和类Java程序程序设计设计2学习目标学习目标u本章介绍本章介绍Java面向对象程序设计的基本知识:面向对象程序设计的基本知识:定义类、创建对象及使用对象解决实际问题定义类、创建对象及使用对象解决实际问题Java程序程序设计设计37.1对象和类的概念对象和类的概念u对象对象对象就是属性加行为对象就是属性加行为u类类类是对象的蓝图类是对象的蓝图u引用引用引用被称为对象的引用被称为对象的“虚地址虚地址”Java程序程序设计设计4Java程序程序设计设计57.1对象和类的概念对象和类的概念u面向对象程序设计的核心是使用面向对象程序设计的核心是使用对
2、象编程对象编程。u对象对象(object)代表现实世界中可以明确识别的一个)代表现实世界中可以明确识别的一个整体事物。例如:整体事物。例如:一个教师、一个学生、一个矩形、软件界一个教师、一个学生、一个矩形、软件界面中的一个窗口等,都可以看作是一个对象。面中的一个窗口等,都可以看作是一个对象。u对象必须具备自己独有的特征:对象必须具备自己独有的特征:状态和行为状态和行为。u对象的对象的状态状态用一组数据的值来描述,称为用一组数据的值来描述,称为数据域数据域;u对象的对象的行为行为由一组对象能够完成的由一组对象能够完成的方法方法来描述。例如:来描述。例如:n一个矩形对象可以有宽和高两个数据域,它们
3、的数值是矩形一个矩形对象可以有宽和高两个数据域,它们的数值是矩形对象存在基础;同时矩形对象具有根据宽和高对象存在基础;同时矩形对象具有根据宽和高计算面积和周计算面积和周长长的方法。的方法。Java程序程序设计设计67.1对象和类的概念对象和类的概念u类(类(class)是定义同一类型对象的结构。如)是定义同一类型对象的结构。如n在特定场合下,所有的矩形都必须具有宽和高两个在特定场合下,所有的矩形都必须具有宽和高两个double类型数据域,具有计算面积的方法和计算类型数据域,具有计算面积的方法和计算周长的方法。周长的方法。u在类中使用在类中使用变量变量来表示来表示数据域数据域;方法方法表示表示行
4、为行为u在类中必须具有一种特殊的方法,称为在类中必须具有一种特殊的方法,称为构造方构造方法法,调用它可以,调用它可以创建类的对象创建类的对象。Java程序程序设计设计77.1对象和类的概念对象和类的概念u矩形类:矩形类:Rectangle类类uRectangle的一个对象:的一个对象:rectObject类图:类图:对象图:对象图:类名类名类的属性类的属性类的方法类的方法对象名对象名对象状态对象状态7.1对象和类的概念对象和类的概念:基本特性基本特性u面向对象程序设计正是利用对现实世界中对象的抽象和对象面向对象程序设计正是利用对现实世界中对象的抽象和对象之间关系的直接描述实现软件系统,它具有以
5、下四个基本特之间关系的直接描述实现软件系统,它具有以下四个基本特性:性:n抽象性:是指对现实世界中某一类实体或事物进行抽象,提取重抽象性:是指对现实世界中某一类实体或事物进行抽象,提取重要的共同特征,忽略次要特征,从而形成程序中的对象和类。要的共同特征,忽略次要特征,从而形成程序中的对象和类。n封装性:是指对象的使用者在通过预定义的接口去使用对象提供封装性:是指对象的使用者在通过预定义的接口去使用对象提供的服务时,无需了解这些服务是如何实现的的服务时,无需了解这些服务是如何实现的。n继承性:是指建立子类时可以继承父类的全部或部分特征,并增继承性:是指建立子类时可以继承父类的全部或部分特征,并增
6、加子类独有的特征,从而简化子类的设计。加子类独有的特征,从而简化子类的设计。n多态性:是指程序中不同的对象在收到相同的外部消息时会做出多态性:是指程序中不同的对象在收到相同的外部消息时会做出不同响应的能力。多态性扩大了对象的适应能力,使程序可扩展不同响应的能力。多态性扩大了对象的适应能力,使程序可扩展性更好。性更好。Java程序程序设计设计8第8章本章7.2类的定义类的定义uJava语言中语言中,类主要有两个来源途径类主要有两个来源途径nJava类库:参看类库:参看String类与类与Scanner类类n用户自定义的类:参看用户自定义的类:参看Rectangle类类u所有的类都是所有的类都是O
7、bject类的子类。类的子类。u如果在自定义类时,没有写明父类,则默认如果在自定义类时,没有写明父类,则默认的父类为的父类为Object。u从严格意义上讲从严格意义上讲,Java程序中定义的所有类程序中定义的所有类都是子类。都是子类。Java程序程序设计设计9Java程序程序设计设计107.2类类的定义的定义类是一种抽象数据类型,类是一种抽象数据类型,Java语言定义类的语法如下:语言定义类的语法如下:修饰符修饰符class类名类名/类的数据域成员类的数据域成员数据域数据域1;数据域数据域2;/类的方法成员类的方法成员构造方法构造方法1;构造方法构造方法2;方法方法1;方法方法2;Page.9
8、67.2类类的定义的定义修饰符修饰符class类名类名/类的数据域成员类的数据域成员数据域数据域1;数据域数据域2;/类的方法成员类的方法成员构造方法构造方法1;构造方法构造方法2;方法方法1;方法方法2;Java程序程序设计设计11构造方法构造方法成员成员是特殊的方法,用于创建是特殊的方法,用于创建和初始化对象。构造方法语法规则包括:和初始化对象。构造方法语法规则包括:修饰符修饰符 类名类名(形式参数列表形式参数列表)类头类头类名类名:符合:符合标识符命名标识符命名规则规则,通常用名词或名词,通常用名词或名词性短语,构成类名的每个单词的首字母都应大写性短语,构成类名的每个单词的首字母都应大写
9、类体类体:由一对由一对大括号大括号括起来括起来数据域成员数据域成员:与变量定义同与变量定义同, 语法格式语法格式修饰符修饰符 数据类型数据类型 成员变量成员变量;方法成员方法成员定义定义(参见第参见第6章内容章内容), 方法头为:方法头为:修饰符修饰符 返回值类型返回值类型 方法名方法名(形式参数列表形式参数列表)Java程序程序设计设计127.2类类的定义的定义u类定义的语法结构由类头和类体两个部分组成。类定义的语法结构由类头和类体两个部分组成。n类头自左向右包括可选的修饰符、关键字类头自左向右包括可选的修饰符、关键字class、类名。、类名。n类名用标识符命名,通常用名词或名词性短语,构成
10、类名的每个单词的类名用标识符命名,通常用名词或名词性短语,构成类名的每个单词的首字母都应大写。首字母都应大写。u类体由一对大括号括起来。类体由一对大括号括起来。n类的组成部分称为类成员,包括数据域和方法成员。类的组成部分称为类成员,包括数据域和方法成员。u数据域成员的定义方式与变量定义相同,语法格式如下:数据域成员的定义方式与变量定义相同,语法格式如下:n修饰符修饰符数据类型数据类型数据域名数据域名;u方法成员包括:方法和构造方法。构造方法是特殊的方法,用方法成员包括:方法和构造方法。构造方法是特殊的方法,用于创建和初始化对象。构造方法的语法规则于创建和初始化对象。构造方法的语法规则:n修饰符
11、修饰符类名类名(形式参数列表形式参数列表)。Java程序程序设计设计137.2类类的定义的定义Page.97多个类的文件组织多个类的文件组织u实验书:实验书:Page.16.【题目题目7001圆环类的定义与圆环类的定义与使用使用】n步骤步骤1:Ring.javan步骤步骤2:TestRing.javan步骤步骤3:修改:修改TestRing.java,使用无参数的构造方法,使用无参数的构造方法n步骤步骤4:修改:修改Ring.java,增加无参数的构造方法,增加无参数的构造方法n步骤步骤5:修改:修改Ring.java,增加计算周长方法,修改,增加计算周长方法,修改TestRing.java,
12、增加输出周长语句,增加输出周长语句u不能在不能在main函数中定义类。函数中定义类。u创建多个类文件演示创建多个类文件演示n首先创建应用程序首先创建应用程序TestRing.javan其后在源程序所在包里面创建类其后在源程序所在包里面创建类Ring.javaJava程序程序设计设计147.3创建对象:创建对象:声明对象的引用变量声明对象的引用变量u声明对象变量的语法格式为:声明对象变量的语法格式为:n类名类名对象名对象名1,对象名对象名2;u例如:例如:nRectanglerect1,rect2;Java程序程序设计设计157.3创建对象创建对象:构造方法:构造方法u构造方法是在构造类对象时使
13、用的一种构造方法是在构造类对象时使用的一种特殊的成员方法特殊的成员方法,其主,其主要作用是要作用是初始化成员变量初始化成员变量。u构造方法用于创建类的对象。使用构造方法用于创建类的对象。使用new运算符运算符进行调用进行调用构造方构造方法法,语法格式如下:,语法格式如下:new构造方法构造方法(实参列表实参列表);u调用构造方法时同样要调用构造方法时同样要求实参与形参在数量和顺序上匹配求实参与形参在数量和顺序上匹配,类类型兼容型兼容,构造方法可以重载构造方法可以重载。创建。创建Rectangle类的两个对象:类的两个对象:nrect1=newRectangle();/调用调用无参构造方法无参构
14、造方法,创建宽和,创建宽和高都为高都为0的矩形对象的矩形对象nrect2=newRectangle(10,15);/调用调用有参构造方法有参构造方法,创建,创建宽宽10高高15的矩形对象的矩形对象Java程序程序设计设计167.3创建对象创建对象:默认构造方法:默认构造方法u默认构造方法默认构造方法n类的结构中没有显式定义构造方法类的结构中没有显式定义构造方法时时,Java编译器会为类编译器会为类自动自动添加一个添加一个方法体为空的无参构造方法方法体为空的无参构造方法,称为默认构造,称为默认构造方法。方法。u对象和实例两个概念可以互换使用对象和实例两个概念可以互换使用n类是对象的模板,定义了属
15、于该类的对象应该具有的数据类是对象的模板,定义了属于该类的对象应该具有的数据和方法。和方法。n一个对象是类的一个特定的实例。一个对象是类的一个特定的实例。n可以从一个类创建多个对象。可以从一个类创建多个对象。n创建类的一个对象称为实例化。创建类的一个对象称为实例化。Java程序程序设计设计17习题与实验习题与实验u书本作业书本作业n复习题复习题7.1,7.2n编程练习编程练习7.8u实验实验n题目题目7001Java程序程序设计设计187.4访问对象访问对象u使用使用new运算符调用构造方法后,创建的对象在内运算符调用构造方法后,创建的对象在内存中占有一定的空间。存中占有一定的空间。u7.4.
16、1引用类型和引用变量引用类型和引用变量u7.4.2访问对象的成员访问对象的成员u7.4.3数据域的初始值数据域的初始值u7.4.4类与对象应用实例类与对象应用实例Java程序程序设计设计197.4.1引用类型和引用变量引用类型和引用变量:概念:概念u引用类型引用类型n由类型的实际值引用(类似于指针)表示的数据类型。由类型的实际值引用(类似于指针)表示的数据类型。n如果为某个变量分配一个引用类型,则该变量将引用如果为某个变量分配一个引用类型,则该变量将引用/指向指向原始值。不创建任何副本。原始值。不创建任何副本。类类和和数组数组均为引用类型。均为引用类型。u引用变量引用变量n使用使用引用类型声明
17、的变量即为引用变量引用类型声明的变量即为引用变量nJava语言使用引用变量来访问对象,引用变量中存放一个语言使用引用变量来访问对象,引用变量中存放一个对象的地址,定义引用变量的语法格式如下:对象的地址,定义引用变量的语法格式如下:n类名类名引用变量名引用变量名;Java程序程序设计设计207.4.1引用类型和引用变量引用类型和引用变量u两个两个Rectangle类的引用变量:类的引用变量:nRectanglerect1,rect2;urect1,rect2是是Rectangle的的对象,创建两个对象对象,创建两个对象nrect1=newRectangle();nrect2=newRectang
18、le(10,5);u声明引用变量声明引用变量、创建对象和给引用变量赋值、创建对象和给引用变量赋值合并为一条语句合并为一条语句:nRectanglerect=newRectangle(10,5);u引用变量中没有直接存放对象,它只存放了对象的地址。引用变量中没有直接存放对象,它只存放了对象的地址。Java程序程序设计设计217.4.2访问对象的成员访问对象的成员:成员运算符成员运算符u成员运算符成员运算符“.”n引用变量引用变量利用成员运算符利用成员运算符“.”访问访问所引用的所引用的对象的数据对象的数据域成员和方法成员。语法格式如下:域成员和方法成员。语法格式如下:n访问数据域成员:引用变量访
19、问数据域成员:引用变量.数据域名数据域名n访问方法成员:引用变量访问方法成员:引用变量.方法名方法名(实参列表实参列表)u如以下访问如以下访问Rectangle对象的成员的语句:对象的成员的语句:nRectanglerect=newRectangle(10,5);nSystem.out.println(Area=+rect.getArea();/输出:输出:Area=50.0nrect.width=6;/把该矩形对象的把该矩形对象的width赋值为赋值为6nSystem.out.println(Area=+rect.getArea();/输出:输出:Area=30.0Java程序程序设计设计2
20、27.4.3数据域的初始值数据域的初始值uJava语言使用直接量语言使用直接量null表示引用变量没有引用对象。表示引用变量没有引用对象。u调用类的构造方法创建对象时,如果构造方法中没有为对象调用类的构造方法创建对象时,如果构造方法中没有为对象的数据域赋值,则对象的数据域会获得默认的初始值。的数据域赋值,则对象的数据域会获得默认的初始值。uJava语言规定了不同类型的数据域的默认初始值:语言规定了不同类型的数据域的默认初始值:n引用类型为引用类型为null,数值类型为,数值类型为0,boolean类型为类型为false,char类型类型为为u0000。u如描述课程的类部分定义。如描述课程的类部
21、分定义。publicclassCourse调用默认构造方法创建对象调用默认构造方法创建对象Stringname;/课程名课程名nullinthours;/学时学时0doublecredit;/学分学分0.0booleanisRequired;/是否必修是否必修falsechargrade;/课程等级课程等级u0000Java程序程序设计设计237.4.4类与对象应用实例类与对象应用实例例例7.1:定义一个类并创建和使用对象。定义本章的矩形类:定义一个类并创建和使用对象。定义本章的矩形类Rectangle,创建该类的对象并通过引用变量使用对象。,创建该类的对象并通过引用变量使用对象。解题思路:本
22、例创建两个类:用于描述矩形的解题思路:本例创建两个类:用于描述矩形的Rectangle类,前面已经给出类的定义;用于使用类,前面已经给出类的定义;用于使用Rectangle的类的类TestRectangle,该类只有,该类只有main方法,方法,main方法中定义引用变量、创建对象并计算矩形的面积和周方法中定义引用变量、创建对象并计算矩形的面积和周长等。长等。Java程序程序设计设计247.4.4类与对象应用实例类与对象应用实例程序源码:包括两个类的源程序文件。程序源码:包括两个类的源程序文件。(1)矩形类)矩形类Rectangle的源程序的源程序/文件名:文件名:Rectangle.java
23、publicclassRectangledoublewidth;/宽度宽度doubleheight;/高度高度Rectangle()/无参构造方法无参构造方法width=0;height=0;Rectangle(doublew,doubleh)/有参构造方法有参构造方法width=w;height=h;doublegetArea()/计算面积的方法计算面积的方法returnwidth*height;doublegetPerimeter()/计算周长的方法计算周长的方法return2*(width+height);Java程序程序设计设计257.4.4类与对象应用实例类与对象应用实例(2)测试类
24、)测试类TestRectangle的源程序的源程序/文件名:文件名:TestRectangle.javapublicclassTestRectanglepublicstaticvoidmain(Stringargs)Rectanglerect=newRectangle(10,5);System.out.println(面积:面积:+rect.getArea();System.out.println(周长:周长:+rect.getPerimeter();rect.width=6;System.out.println(面积:面积:+rect.getArea();System.out.println
25、(周长:周长:+rect.getPerimeter();Java程序程序设计设计267.5类成员的可访问性类成员的可访问性面向对象程序设计的特性之一是面向对象程序设计的特性之一是封装性封装性,Java语语言通过言通过访问修饰符访问修饰符对类及其成员的使用范围进行限制。对类及其成员的使用范围进行限制。Java程序程序设计设计277.5.1包包uJava语言使用包(语言使用包(package)来管理应用程序中的类)来管理应用程序中的类nJava语言的每一个类都位于一个特定包中。语言的每一个类都位于一个特定包中。u默认包默认包n没有指定类在哪个包没有指定类在哪个包时,该时,该类位于类位于默认包中默认
26、包中nJava语言虽然允许但不推荐把类置于默认包中。语言虽然允许但不推荐把类置于默认包中。u使用包来管理类有四个优点:使用包来管理类有四个优点:n把功能相近的类置于同一个包中便于查找类;把功能相近的类置于同一个包中便于查找类;n减少或避免命名冲突的情况出现减少或避免命名冲突的情况出现n可以更加灵活的处理类及其成员的可访问性,更好地对类进行保护;可以更加灵活的处理类及其成员的可访问性,更好地对类进行保护;n使用具有层次关系的包管理类,更加便于应用程序的发布。使用具有层次关系的包管理类,更加便于应用程序的发布。Java程序程序设计设计287.5.1包包u包的层次性包的层次性nJava语言的包中还可
27、以包含子包。语言的包中还可以包含子包。n为包进行命名时,使用为包进行命名时,使用“.”分隔父包与其子包。分隔父包与其子包。n例如包名例如包名java.lang说明顶层包为说明顶层包为java,其中包含了,其中包含了lang子包;子包;n类名类名java.lang.Math说明说明Math类位于包类位于包java.lang中。中。n通常包名全部使用小写字母命名。通常包名全部使用小写字母命名。upackage语句语句n该语句必须位于一个源程序文件中的第一条语句,其前面只能有注释。该语句必须位于一个源程序文件中的第一条语句,其前面只能有注释。n用于用于把源程序文件中定义的所有类置于同一个包中把源程序
28、文件中定义的所有类置于同一个包中npackage语句的语法格式如下:语句的语法格式如下:npackage包名包名;Java程序程序设计设计297.5.1包包:例子:例子u例例7-2:把类置于包中的例子。:把类置于包中的例子。u程序源码:程序源码:n/文件名:文件名:TestPackage.javanpackagech07.pkg01;/把本源程序文件中的类置把本源程序文件中的类置于于ch07.pkg01包中包中npublicclassTestPackagenvoidprintMessage()nSystem.out.println(Welcometojava.);nnJava程序程序设计设计3
29、07.5.1包包u使用包管理应用程序的类,使用包管理应用程序的类,若若使用类和被使用类位于同一包,使用类和被使用类位于同一包,可不需特别说明可不需特别说明,直接使用。直接使用。u如果两个类不在同一包中,有两种方式:如果两个类不在同一包中,有两种方式:使用类的命名。使用类的命名。这种方式在程序中如果使用次数非常多就不方便了。这种方式在程序中如果使用次数非常多就不方便了。使用使用import语句导入类。语句导入类。import语句位于源程序代码中包语句后面,类定义之前。语句位于源程序代码中包语句后面,类定义之前。uimport语句有两种使用形式,例如:语句有两种使用形式,例如:nimportjav
30、ax.swing.*;/导入导入javax.swing包中的所有类包中的所有类nimportjavax.swing.JOptionPane;/导入导入JOptionPane一个类一个类u两种两种import方式对程序的编译和运行效率的影响是相同的。方式对程序的编译和运行效率的影响是相同的。Java程序程序设计设计317.5.2访问修饰符访问修饰符u访问修饰符用来限制应用程序中类和类成员的使用范围,访问修饰符用来限制应用程序中类和类成员的使用范围,Java语言提供了语言提供了public、protected、private三个访问三个访问修饰符实现四种访问范围。修饰符实现四种访问范围。下下表中列
31、出了表中列出了Java语言的四种访语言的四种访问范围。问范围。Java程序程序设计设计32访问修饰符访问修饰符同一类范围内同一类范围内 同一包范围内同一包范围内子类范围内子类范围内其他范围内其他范围内publicprotected无private7.5.2访问修饰符访问修饰符Java程序程序设计设计337.5.3类的封装类的封装u类的封装类的封装n合理使用访问修饰符,使类及其成员具有合理的访问范围。合理使用访问修饰符,使类及其成员具有合理的访问范围。upublic修饰修饰的部分包括:的部分包括:n类类,方法成员方法成员(需要给其它类调用的需要给其它类调用的方法方法),构造方法构造方法成员成员u
32、private修饰修饰的部分包括:的部分包括:n数据域数据域成员,仅本类内部使用的方法成员成员,仅本类内部使用的方法成员u为每个数据域提供访问器方法和修改器方法。为每个数据域提供访问器方法和修改器方法。n访问器方法访问器方法:public数据类型数据类型get属性名属性名()n修改器方法修改器方法:publicvoidset属性名属性名(数据类型数据类型形参形参)u数据类型为数据类型为boolean时,访问器方法定义如下形式:时,访问器方法定义如下形式:npublic数据类型数据类型is属性名属性名()Java程序程序设计设计347.6类的静态成员类的静态成员uJava语言的类语言的类中,成员
33、类型中,成员类型包括静态成员和实例成员两种包括静态成员和实例成员两种u使用使用static修饰的成员称为静态成员,包括修饰的成员称为静态成员,包括n静态数据域(也称类变量)、静态方法(也称类方法)。静态数据域(也称类变量)、静态方法(也称类方法)。n静态成员属于类本身,而不属于类的任何一个对象。静态成员属于类本身,而不属于类的任何一个对象。见见例例7-4:为为Rectangle2类增加表示创建对象个数的静态数类增加表示创建对象个数的静态数据域,及获取其值的静态访问器方法。新定义的矩形类命名据域,及获取其值的静态访问器方法。新定义的矩形类命名为为Rectangle3。Java程序程序设计设计35
34、Java程序程序设计设计367.6类的静态成员类的静态成员:静态数据域静态数据域u实例数据域属于特定的对象实例数据域属于特定的对象n一个类可以使用一个类可以使用new运算符创建很多对象运算符创建很多对象n每个对象独立拥有自己的实例数据域。本例无论创建多少个矩形对象,每个对象独立拥有自己的实例数据域。本例无论创建多少个矩形对象,每个对象都独立拥有自己的实例数据域每个对象都独立拥有自己的实例数据域width和和height。u静态数据域是类拥有的静态数据域是类拥有的n所有创建的矩形对象以共享方式访问。本所有创建的矩形对象以共享方式访问。本例例中的静态数据域中的静态数据域numberOfRectan
35、gles是所有创建的矩形对象共享的。是所有创建的矩形对象共享的。u在访问修饰符允许的情况下,访问静态数据域的方式:在访问修饰符允许的情况下,访问静态数据域的方式:n对象引用变量对象引用变量.静态数据域静态数据域/不推荐使用该方式不推荐使用该方式n类名类名.静态数据域静态数据域/推荐使用该方式推荐使用该方式Java程序程序设计设计377.6类的静态成员类的静态成员:静态方法静态方法u静态方法属于类的,可以通过类名调用。静态方法属于类的,可以通过类名调用。n在静态方法中只能使用本类中的静态成员,不能使用实在静态方法中只能使用本类中的静态成员,不能使用实例成员例成员u在实例方法中静态和实例成员都可以
36、使用。在实例方法中静态和实例成员都可以使用。u对静态方法的调用的形式:对静态方法的调用的形式:n对象引用变量对象引用变量.静态方法静态方法(参数参数)/不推荐使用该方式不推荐使用该方式n类名类名.静态方法静态方法(参数参数)/推荐使用该方式推荐使用该方式Java程序程序设计设计387.7类和对象应用类和对象应用Java语言的类和对象的定义和使用过程中还有其它语言的类和对象的定义和使用过程中还有其它需要注意的问题,如类中各种变量的作用域、关键字需要注意的问题,如类中各种变量的作用域、关键字this的的使用、对象数组和对象作为方法的参数等。使用、对象数组和对象作为方法的参数等。Java程序程序设计
37、设计397.7.1变量的作用域变量的作用域u类中的变量主要有类中的变量主要有n类的数据域和局部变量两种形式。类的数据域和局部变量两种形式。u局部变量局部变量n在类的方法中定义的变量在类的方法中定义的变量n不能使用访问修饰符限制作用域不能使用访问修饰符限制作用域n作用域为定义变量的语句开始到该语句所属的语句块的作用域为定义变量的语句开始到该语句所属的语句块的右大括号。右大括号。Java程序程序设计设计407.7.1变量的作用域变量的作用域u类的数据域在类内部的作用域为整个类范围,见图类的数据域在类内部的作用域为整个类范围,见图(a)。u某数据域的初始化时使用了另一个数据域,此时被使用的数某数据域
38、的初始化时使用了另一个数据域,此时被使用的数据域必须定义在前面,如图据域必须定义在前面,如图(b)。Java程序程序设计设计417.7.1变量的作用域变量的作用域uJava语言允许类方法中的局部变量与类的数据域同名。语言允许类方法中的局部变量与类的数据域同名。u在定义局部变量的方法内部,局部变量将屏蔽数据域在定义局部变量的方法内部,局部变量将屏蔽数据域n局部变量有效。局部变量有效。u参见如下程序代码:参见如下程序代码:upublicclassSamplenprivateStringname=“张三张三”;/类的类的数据域数据域成员成员npublicvoidprintName()nStringn
39、ame=“李四李四”;/方法里的方法里的局部变量,屏蔽局部变量,屏蔽了了类的类的数据域数据域成员成员namenSystem.out.println(“name=”+name);/输输出出方法内的方法内的局部变量的值局部变量的值u上述类执行后,输出结果是局部变量的值上述类执行后,输出结果是局部变量的值“李四李四”。Java程序程序设计设计427.7.2关键字关键字thisuJava语言使用关键字语言使用关键字this表示对类的当前对象的引用。表示对类的当前对象的引用。u类的实例方法中可以用如下方式对当前对象的数据域或方法类的实例方法中可以用如下方式对当前对象的数据域或方法进行引用:进行引用:nt
40、his.数据域数据域/引用当前对象的数据域引用当前对象的数据域nthis.实例方法实例方法(参数参数)/引用当前对象的实例方法引用当前对象的实例方法u在类的一个构造方法中直接调用另外一个构造方法。在类的一个构造方法中直接调用另外一个构造方法。n这种调用不创建对象,只是将程序流程由当前构造方法转这种调用不创建对象,只是将程序流程由当前构造方法转到被调用的构造方法执行,返回后继续执行当前构造方法到被调用的构造方法执行,返回后继续执行当前构造方法剩下的语句。其使用形式如下:剩下的语句。其使用形式如下:this(参数参数);Java程序程序设计设计437.7.3对象作为方法的参数与返回值对象作为方法的
41、参数与返回值uJava语言的参数传递是语言的参数传递是“单向值传递单向值传递”。u对象引用变量作为参数和返回值时,在方法之间传对象引用变量作为参数和返回值时,在方法之间传递的是对象的地址。递的是对象的地址。n进行参数传递时,调用方法的实参引用变量与被调用方法进行参数传递时,调用方法的实参引用变量与被调用方法的形参引用变量引用的是同一个对象。的形参引用变量引用的是同一个对象。Java程序程序设计设计447.7.3对象作为方法的参数与返回值对象作为方法的参数与返回值u例例7-6:编写一个:编写一个TestRectangle4类,其中定义两个静态类,其中定义两个静态方法:方法:createRecta
42、ngle方法作用是产生一个随机大小的方法作用是产生一个随机大小的矩形对象;矩形对象;displayRectangle方法的输出一个矩形对象,方法的输出一个矩形对象,使用形参获得矩形对象。使用形参获得矩形对象。upublicclassTestRectangle4npublicstaticvoidmain(Stringargs)nRectangle4rect=createRectangle();ndisplayRectangle(rect);nuJava程序程序设计设计45upublicstaticRectangle4createRectangle()nRectangle4rect;ndouble
43、width=Math.random()*100;ndoubleheight=Math.random()*100;nrect=newRectangle4(width,height);nreturnrect;uupublicstaticvoiddisplayRectangle(Rectangle4rect)nSystem.out.print(对象:对象:+rect);nSystem.out.printf(,宽:宽:%5.2f,高:高:%5.2f,rect.getWidth(),rect.getHeight();nSystem.out.printf(,面积:,面积:%.2f,周长:周长:%.2fn,
44、rect.getArea(),rect.getPerimeter();nuJava程序程序设计设计467.7.4对象数组对象数组u存储和使用一个类的很多对象时使用对象数组。存储和使用一个类的很多对象时使用对象数组。u对象数组是指数组元素为对象引用变量的数组。对象数组是指数组元素为对象引用变量的数组。u定义数组变量及创建数组的形式如下:定义数组变量及创建数组的形式如下:n类名类名数组变量数组变量=new类名类名数组大小数组大小;u例如要定义并创建一个可以存放例如要定义并创建一个可以存放10个个Rectangle4对象的对象的数组使用以下语句:数组使用以下语句:nRectangle4rectArr
45、ay=newRectangle410;u如果要将数组的每个元素都引用一个矩形对象,可以使用如如果要将数组的每个元素都引用一个矩形对象,可以使用如下的循环语句实现:下的循环语句实现:nfor(inti=0;irectArray.length;i+)nrectArrayi=newRectangle4();nJava程序程序设计设计477.8实例分析:二维实例分析:二维坐标系坐标系的圆的圆例例7-8:编写程序,用户输入二维坐标系的两个圆的圆心坐标和半径后,程序能:编写程序,用户输入二维坐标系的两个圆的圆心坐标和半径后,程序能够判断这两个圆是否是相交圆。够判断这两个圆是否是相交圆。Java程序程序设计设计48定义3个public的类:Main,Circle,Point课后工作课后工作u复习本章内容复习本章内容uPage.115-116复习题复习题uPage.117编程练习编程练习Java程序程序设计设计49