《Java第4章类与对象.ppt》由会员分享,可在线阅读,更多相关《Java第4章类与对象.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4章章 类与对象类与对象本章导读本章导读1 1、面向对象编程面向对象编程面向对象编程面向对象编程2 2、类声明和类体类声明和类体类声明和类体类声明和类体3 3、类体的构成类体的构成类体的构成类体的构成4 4、构造方法与对象的创建构造方法与对象的创建构造方法与对象的创建构造方法与对象的创建5 5、对象的引用与实体对象的引用与实体对象的引用与实体对象的引用与实体6 6、成员变量成员变量成员变量成员变量7 7、方法方法方法方法8 8、方法重载方法重载方法重载方法重载本章导读本章导读9 9、thisthis关键字关键字关键字关键字1010、包包包包1111、import import 语句语句语句
2、语句1212、访问权限访问权限访问权限访问权限1313、对象的组合对象的组合对象的组合对象的组合1414、基本类型数据的类包装基本类型数据的类包装基本类型数据的类包装基本类型数据的类包装1515、反编译和文档生成器反编译和文档生成器反编译和文档生成器反编译和文档生成器1616、JARJAR文件文件文件文件4.1 面向对象编程面向对象编程 n n封装封装封装封装qq将数据以及对数据的操作封装在类中。将数据以及对数据的操作封装在类中。将数据以及对数据的操作封装在类中。将数据以及对数据的操作封装在类中。n n继承继承继承继承qq子类可以继承父类的属性子类可以继承父类的属性子类可以继承父类的属性子类可
3、以继承父类的属性(数据数据数据数据)和功能和功能和功能和功能(操作操作操作操作)n n多态多态多态多态qq操作名称的多态操作名称的多态操作名称的多态操作名称的多态&和继承有关的多态和继承有关的多态和继承有关的多态和继承有关的多态 操作名称的多态操作名称的多态操作名称的多态操作名称的多态:是指可以向操作传递不同消息,是指可以向操作传递不同消息,是指可以向操作传递不同消息,是指可以向操作传递不同消息,以便让对象调用时可能产生不同的行为。以便让对象调用时可能产生不同的行为。以便让对象调用时可能产生不同的行为。以便让对象调用时可能产生不同的行为。和继承有关的多态:和继承有关的多态:和继承有关的多态:和
4、继承有关的多态:是指同一个操作被不同类型对象是指同一个操作被不同类型对象是指同一个操作被不同类型对象是指同一个操作被不同类型对象调用时可能产生不同的行为。调用时可能产生不同的行为。调用时可能产生不同的行为。调用时可能产生不同的行为。4.2 类声明和类体类声明和类体 n n类类类类是组成是组成是组成是组成JavaJava程序的基本要素,类封装了一类对象的状态程序的基本要素,类封装了一类对象的状态程序的基本要素,类封装了一类对象的状态程序的基本要素,类封装了一类对象的状态和方法。和方法。和方法。和方法。n n类是用来定义对象的模板,可以用类创建对象。类是用来定义对象的模板,可以用类创建对象。类是用
5、来定义对象的模板,可以用类创建对象。类是用来定义对象的模板,可以用类创建对象。n n当使用一个类创建了一个当使用一个类创建了一个当使用一个类创建了一个当使用一个类创建了一个对象对象对象对象时,我们也说给出了这个类时,我们也说给出了这个类时,我们也说给出了这个类时,我们也说给出了这个类的一个的一个的一个的一个实例实例实例实例。n n在语法上,类由两部分构成:在语法上,类由两部分构成:在语法上,类由两部分构成:在语法上,类由两部分构成:类声明和类体类声明和类体类声明和类体类声明和类体n n基本格式为:基本格式为:基本格式为:基本格式为:class class 类名类名类名类名 类体的内容类体的内容
6、类体的内容类体的内容 class dog class dog class class 机动车机动车机动车机动车 n n 类名:类名:类名:类名:类名必须是合法的类名必须是合法的类名必须是合法的类名必须是合法的JavaJava标识符,不能是标识符,不能是标识符,不能是标识符,不能是JavaJava中中中中的关键字。的关键字。的关键字。的关键字。n n给类命名时,最好遵守下列习惯:给类命名时,最好遵守下列习惯:给类命名时,最好遵守下列习惯:给类命名时,最好遵守下列习惯:qq如果类名使用如果类名使用如果类名使用如果类名使用拉丁字母拉丁字母拉丁字母拉丁字母,那么名字的,那么名字的,那么名字的,那么名字
7、的首字母首字母首字母首字母使用使用使用使用 大写大写大写大写字母字母字母字母n n如:如:如:如:HelloHello、TimeTime、PeoplePeopleqq类名最好容易识别、见名知意。类名最好容易识别、见名知意。类名最好容易识别、见名知意。类名最好容易识别、见名知意。qq当类名当类名当类名当类名由几个由几个由几个由几个“单词单词单词单词”复合而成复合而成复合而成复合而成时,时,时,时,每个单词的首写字每个单词的首写字每个单词的首写字每个单词的首写字母母母母使用大写。使用大写。使用大写。使用大写。n n如:如:如:如:BeijingTimeBeijingTime、AmericanGam
8、eAmericanGame、HelloChinaHelloChina返回返回返回返回4.3 类体的构成类体的构成n n 写类的写类的写类的写类的目的目的目的目的是为了描述一类事物共有的属性和功能,是为了描述一类事物共有的属性和功能,是为了描述一类事物共有的属性和功能,是为了描述一类事物共有的属性和功能,即将数据和对数据的操作封装在一起,这一过程由类体来即将数据和对数据的操作封装在一起,这一过程由类体来即将数据和对数据的操作封装在一起,这一过程由类体来即将数据和对数据的操作封装在一起,这一过程由类体来实现。实现。实现。实现。n n类体类体类体类体内容可以有内容可以有内容可以有内容可以有2 2种类
9、型的成员:种类型的成员:种类型的成员:种类型的成员:qq成员变量(或域)成员变量(或域)成员变量(或域)成员变量(或域)n n在类体声明定义的变量,用来刻画类创建的对象的属在类体声明定义的变量,用来刻画类创建的对象的属在类体声明定义的变量,用来刻画类创建的对象的属在类体声明定义的变量,用来刻画类创建的对象的属性。性。性。性。qq成员方法成员方法成员方法成员方法(1 1)由类所创建的对象调用,对象调用这些方法操作由类所创建的对象调用,对象调用这些方法操作由类所创建的对象调用,对象调用这些方法操作由类所创建的对象调用,对象调用这些方法操作成员变量形成一定的算法,体现对象具有某种功能。成员变量形成一
10、定的算法,体现对象具有某种功能。成员变量形成一定的算法,体现对象具有某种功能。成员变量形成一定的算法,体现对象具有某种功能。(2 2)构造方法)构造方法)构造方法)构造方法是具有特殊地位的方法,供类创建对象是具有特殊地位的方法,供类创建对象是具有特殊地位的方法,供类创建对象是具有特殊地位的方法,供类创建对象时使用,用来给出类所创建的对象的初始状态。时使用,用来给出类所创建的对象的初始状态。时使用,用来给出类所创建的对象的初始状态。时使用,用来给出类所创建的对象的初始状态。class 机动车机动车 int speed;/变量定义部分变量定义部分 float weight,height;/变量定义
11、部分变量定义部分 void changSpeed(int newSpeed)/方法定义方法定义 speed=newSpeed;float getWeight()/方法定义方法定义 return weight;float getHeight()/方法定义方法定义 return height;n n例:例:例:例:机动车类机动车类机动车类机动车类n n例:例:例:例:机动车类机动车类机动车类机动车类qq成员变量有成员变量有成员变量有成员变量有2 2个个个个floatfloat类型的变量:类型的变量:类型的变量:类型的变量:“weight”“weight”、“height”“height”和一个和一
12、个和一个和一个intint型变量型变量型变量型变量“speed”“speed”。qq成员方法有成员方法有成员方法有成员方法有3 3个:个:个:个:“changSpeed”“changSpeed”、“getWeight”“getWeight”和和和和“getHeight”“getHeight”。对成员变量的说明:对成员变量的说明:n n (1 1)成员变量的类型)成员变量的类型)成员变量的类型)成员变量的类型可以是可以是可以是可以是JavaJava中的任何一种数据类型,包括前中的任何一种数据类型,包括前中的任何一种数据类型,包括前中的任何一种数据类型,包括前面学习过的基本类型:整型、浮点型、字符
13、型、数组以及后面要学习面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习的对象及接口。的对象及接口。的对象及接口。的对象及接口。n n (2 2)成员变量在整个类内都有效,与它在类体中书写的先后位置成员变量在整个类内都有效,与它在类体中书写的先后位置成员变量在整个类内都有效,与它在类体中书写的先后位置成员变量在整个类内都有效,与它在类体中书写的先后位置无关。无关。无关。无关。qq例如:例如:例如:例如:机动车类机动车类机动车类机动车类也可以写成也可以写成也可以写成也
14、可以写成机动车机动车机动车机动车2 2class 机动车机动车2 void changSpeed(int newSpeed)/方法定义方法定义 speed=newSpeed;int speed;/变量定义部分变量定义部分 float getWeight()/方法定义方法定义 return weight;float weight;/变量定义部分变量定义部分 float getHeight()/方法定义方法定义 return height;float height;/变量定义部分变量定义部分机动车机动车2n n对成员变量的说明:对成员变量的说明:对成员变量的说明:对成员变量的说明:(3 3)在定义
15、类的成员变量时可以同时赋予初值,表明类在定义类的成员变量时可以同时赋予初值,表明类在定义类的成员变量时可以同时赋予初值,表明类在定义类的成员变量时可以同时赋予初值,表明类所创建的对象的初始状态。所创建的对象的初始状态。所创建的对象的初始状态。所创建的对象的初始状态。(4 4)对成员变量的操作只能放在方法中,方法可以对成对成员变量的操作只能放在方法中,方法可以对成对成员变量的操作只能放在方法中,方法可以对成对成员变量的操作只能放在方法中,方法可以对成员变量进行操作形成算法员变量进行操作形成算法员变量进行操作形成算法员变量进行操作形成算法(合法合法合法合法、非法非法非法非法)类的成员类型中可以有数
16、据和方法类的成员类型中可以有数据和方法类的成员类型中可以有数据和方法类的成员类型中可以有数据和方法(即数据的定义和即数据的定义和即数据的定义和即数据的定义和方法的定义方法的定义方法的定义方法的定义)但不能有语句,语句必须放在方法中。但不能有语句,语句必须放在方法中。但不能有语句,语句必须放在方法中。但不能有语句,语句必须放在方法中。返回返回返回返回class A int a=9;float b=12.6f;void f()a=12;b=12.56f;合法合法class A int a;float b;a=12;/非法,非法,a=12是赋值语句,不是数据是赋值语句,不是数据 的声明的声明 b=1
17、2.56f;/非法非法 void f()非法非法4.4 构造方法与对象的创建构造方法与对象的创建1 1、构造方法、构造方法、构造方法、构造方法2 2、对象的创建、对象的创建、对象的创建、对象的创建1)1)对象的声明对象的声明对象的声明对象的声明2)2)为声明的对象分配成员变量为声明的对象分配成员变量为声明的对象分配成员变量为声明的对象分配成员变量3)3)创建多个不同的对象创建多个不同的对象创建多个不同的对象创建多个不同的对象3 3、使用对象使用对象使用对象使用对象4.4.1 构造方法构造方法n n 在类创建对象时使用构造方法,以便给类所创建的对在类创建对象时使用构造方法,以便给类所创建的对在类
18、创建对象时使用构造方法,以便给类所创建的对在类创建对象时使用构造方法,以便给类所创建的对象一个合理的初始状态。象一个合理的初始状态。象一个合理的初始状态。象一个合理的初始状态。n n 构造方法的名字必须与它所在的类的名字完全相同,构造方法的名字必须与它所在的类的名字完全相同,构造方法的名字必须与它所在的类的名字完全相同,构造方法的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型,即它是并且不返回任何数据类型,即它是并且不返回任何数据类型,即它是并且不返回任何数据类型,即它是voidvoid型,但型,但型,但型,但voidvoid必须省必须省必须省必须省略不写。略不写。略不写。略不写。
19、n n Java Java允许一个类中有若干个构造方法,但这些允许一个类中有若干个构造方法,但这些允许一个类中有若干个构造方法,但这些允许一个类中有若干个构造方法,但这些构造方构造方构造方构造方法的参数必须不同法的参数必须不同法的参数必须不同法的参数必须不同,即或者是参数的个数不同,或者是参,即或者是参数的个数不同,或者是参,即或者是参数的个数不同,或者是参,即或者是参数的个数不同,或者是参数的类型不同数的类型不同数的类型不同数的类型不同(构造函数重载构造函数重载构造函数重载构造函数重载)。qq例:例:例:例:RectRect类类类类class Rect double sideA,sideB;
20、Rect()/无参数构造方法。无参数构造方法。Rect(double a,double b)/有参数构造方法。有参数构造方法。sideA=a;sideB=b;Rect类类double computerArea()return sideA*sideB;double computerGirth()return(sizeA+sideB)*2;4.4.2 对象的创建对象的创建n n当使用一个类创建了一个对象时,我们也说给出了这个类当使用一个类创建了一个对象时,我们也说给出了这个类当使用一个类创建了一个对象时,我们也说给出了这个类当使用一个类创建了一个对象时,我们也说给出了这个类的一个实例。的一个实例。
21、的一个实例。的一个实例。n n创建对象的步骤创建对象的步骤创建对象的步骤创建对象的步骤(2(2步步步步):1 1、声明对象、声明对象、声明对象、声明对象2 2、为对象分配成员变量、为对象分配成员变量、为对象分配成员变量、为对象分配成员变量4.4.2.1 声明对象声明对象n n格式:类名格式:类名格式:类名格式:类名 对象名对象名对象名对象名;qqRect rectangleOneRect rectangleOne;qq用类声明的数据称为类类型变量,即对象。用类声明的数据称为类类型变量,即对象。用类声明的数据称为类类型变量,即对象。用类声明的数据称为类类型变量,即对象。n n 刚刚声明的对象其内
22、存中没有存放任何数据,它没有刚刚声明的对象其内存中没有存放任何数据,它没有刚刚声明的对象其内存中没有存放任何数据,它没有刚刚声明的对象其内存中没有存放任何数据,它没有“引用引用引用引用”任何实体,是一个空对象。任何实体,是一个空对象。任何实体,是一个空对象。任何实体,是一个空对象。n n 空对象是不能使用的。空对象是不能使用的。空对象是不能使用的。空对象是不能使用的。rectangleOnerectangleOnenullnull4.4.2.2 为对象分配成员变量为对象分配成员变量 n n格式:格式:格式:格式:对象名对象名对象名对象名=new =new 类的构造方法;类的构造方法;类的构造方
23、法;类的构造方法;n n上述的上述的上述的上述的RectRect类提供了类提供了类提供了类提供了2 2个构造方法,下面都是合法的创建个构造方法,下面都是合法的创建个构造方法,下面都是合法的创建个构造方法,下面都是合法的创建对象的语句。对象的语句。对象的语句。对象的语句。qqrectangleOne=new Rect();rectangleOne=new Rect();qqrectangleOne=new Rect(10,20);rectangleOne=new Rect(10,20);n n如果类中没有构造方法,系统会调用默认的构造方法如果类中没有构造方法,系统会调用默认的构造方法如果类中没有
24、构造方法,系统会调用默认的构造方法如果类中没有构造方法,系统会调用默认的构造方法(默默默默认的构造方法是无参数的认的构造方法是无参数的认的构造方法是无参数的认的构造方法是无参数的)。n n如果类里定义了一个或多个构造方法,那么如果类里定义了一个或多个构造方法,那么如果类里定义了一个或多个构造方法,那么如果类里定义了一个或多个构造方法,那么JavaJava不提供默不提供默不提供默不提供默认的构造方法。认的构造方法。认的构造方法。认的构造方法。n n如果上述如果上述如果上述如果上述RectRect只提供一个带参数的构造方法,代码只提供一个带参数的构造方法,代码只提供一个带参数的构造方法,代码只提供
25、一个带参数的构造方法,代码“rectangleOne=new Rect();”“rectangleOne=new Rect();”是非法的。是非法的。是非法的。是非法的。n n创建对象的代码创建对象的代码创建对象的代码创建对象的代码“rectangleOne=new Rect(10,20);”“rectangleOne=new Rect(10,20);”会实会实会实会实现下述两件事:现下述两件事:现下述两件事:现下述两件事:1 1、为成员变量分配内存空间,然后执行构造方法中的语、为成员变量分配内存空间,然后执行构造方法中的语、为成员变量分配内存空间,然后执行构造方法中的语、为成员变量分配内存空
26、间,然后执行构造方法中的语句句句句 。2 2、给出一个信息,已确保这些成员变量是属于对象给出一个信息,已确保这些成员变量是属于对象给出一个信息,已确保这些成员变量是属于对象给出一个信息,已确保这些成员变量是属于对象 rectangleOnerectangleOne的的的的(返回一个返回一个返回一个返回一个引用引用引用引用,由引用来,由引用来,由引用来,由引用来“操作管理操作管理操作管理操作管理”这些成员变量这些成员变量这些成员变量这些成员变量)。rectangleOnerectangleOne10102020side Aside Aside Bside B0 xFFFFF0 xFFFFF 称称
27、sideA、sideB的内存单元是属于对象的内存单元是属于对象rectangleOne的实体或属于的实体或属于rectangleOne的成员变量,的成员变量,即这些变量由对象即这些变量由对象rectangleOne操作管理。操作管理。说明:创建对象就是指为它分配成员变量,并获得一个引用,创建对象就是指为它分配成员变量,并获得一个引用,以确保这些成员变量由它操作管理。以确保这些成员变量由它操作管理。对象是一种类类型变量,属于引用型变量,即对象变量对象是一种类类型变量,属于引用型变量,即对象变量中存放着引用。所谓引用型变量,就是用来存放成为中存放着引用。所谓引用型变量,就是用来存放成为“引引用用”
28、的地址号,而且引用型变量可以操作它所引用的变量。的地址号,而且引用型变量可以操作它所引用的变量。Java中引用与中引用与C+中指针的比较:中指针的比较:相同点:相同点:引用型变量和指针变量都用来存放一个地址号。引用型变量和指针变量都用来存放一个地址号。不同点:不同点:引用型变量不能像指针变量那样任意地分配内存地引用型变量不能像指针变量那样任意地分配内存地址,或像整数一样来操作它。址,或像整数一样来操作它。4.4.2.3 创建多个不同的对象创建多个不同的对象n n一个类通过使用一个类通过使用一个类通过使用一个类通过使用newnew运算符可以创建多个不同的对象,这运算符可以创建多个不同的对象,这运
29、算符可以创建多个不同的对象,这运算符可以创建多个不同的对象,这些对象将被分配不同的内存空间。些对象将被分配不同的内存空间。些对象将被分配不同的内存空间。些对象将被分配不同的内存空间。n n改变其中一个对象的状态不会影响其它对象的状态。改变其中一个对象的状态不会影响其它对象的状态。改变其中一个对象的状态不会影响其它对象的状态。改变其中一个对象的状态不会影响其它对象的状态。n n例如,使用前面的例如,使用前面的例如,使用前面的例如,使用前面的RectRect类创建两个对象:类创建两个对象:类创建两个对象:类创建两个对象:qqrectOne=new Rect(10,20);rectOne=new R
30、ect(10,20);qqrectTwo=new Rect(33,66);rectTwo=new Rect(33,66);qq这两个对象所占据的内存空间是互不相同的位置,具有这两个对象所占据的内存空间是互不相同的位置,具有这两个对象所占据的内存空间是互不相同的位置,具有这两个对象所占据的内存空间是互不相同的位置,具有不同的实体。不同的实体。不同的实体。不同的实体。rectOnerectOne10102020side Aside Aside Bside B0 xFFE0 xFFE33336666side Aside Aside Bside BrectTworectTwo0 xFFF0 xFFF4
31、.4.3 使用对象使用对象n n 对象不仅可以操作自己的变量改变状态,而且还可以调对象不仅可以操作自己的变量改变状态,而且还可以调对象不仅可以操作自己的变量改变状态,而且还可以调对象不仅可以操作自己的变量改变状态,而且还可以调用创建它的那个类中的方法,对象通过使用这些方法可以用创建它的那个类中的方法,对象通过使用这些方法可以用创建它的那个类中的方法,对象通过使用这些方法可以用创建它的那个类中的方法,对象通过使用这些方法可以产生一定的行为。产生一定的行为。产生一定的行为。产生一定的行为。n n 通过使用通过使用通过使用通过使用运算符运算符运算符运算符“.”“.”,对象可以实现对自己的变量访,对象
32、可以实现对自己的变量访,对象可以实现对自己的变量访,对象可以实现对自己的变量访问和方法的调用。问和方法的调用。问和方法的调用。问和方法的调用。qq对象操作自己的变量对象操作自己的变量对象操作自己的变量对象操作自己的变量(对象的属性对象的属性对象的属性对象的属性)。qq对象调用类中的方法对象调用类中的方法对象调用类中的方法对象调用类中的方法(对象的功能对象的功能对象的功能对象的功能)。注:当对象调用方法时,方法中的局部变量被分配内存空注:当对象调用方法时,方法中的局部变量被分配内存空注:当对象调用方法时,方法中的局部变量被分配内存空注:当对象调用方法时,方法中的局部变量被分配内存空间。方法执行完
33、毕,局部变量即刻释放内存。如果局部间。方法执行完毕,局部变量即刻释放内存。如果局部间。方法执行完毕,局部变量即刻释放内存。如果局部间。方法执行完毕,局部变量即刻释放内存。如果局部变量声明时如果没有初始化,就没有默认值,所以在使变量声明时如果没有初始化,就没有默认值,所以在使变量声明时如果没有初始化,就没有默认值,所以在使变量声明时如果没有初始化,就没有默认值,所以在使用局部变量之前,要事先为其赋值。用局部变量之前,要事先为其赋值。用局部变量之前,要事先为其赋值。用局部变量之前,要事先为其赋值。n n例例例例4-14-1,使用,使用,使用,使用“Lader”“Lader”类的构造方法创建了两个对
34、象类的构造方法创建了两个对象类的构造方法创建了两个对象类的构造方法创建了两个对象 laderOneladerOne,laderTwo.laderTwo.返回返回返回返回class Lader double above,bottom,height;Lader()Lader(double a,double b,double h)above=a;bottom=b;height=h;public void setAbove(double a)above=a;public void setBottom(double b)bottom=b;public void setHeight(double h)he
35、ight=h;例例例例4-14-1double computeArea()return(above+bottom)*height/2.0;public class Example4_1 public static void main(String args)double area1=0,area2=0;Lader laderOne,laderTwo;laderOne=new Lader();laderTwo=new Lader(10,88,20);laderOne.setAbove(16);laderOne.setBottom(26);laderOne.setHeight(100);lader
36、Two.setAbove(300);laderTwo.setBottom(500);area1=laderOputeArea();area2=laderTputeArea();System.out.println(laderOne的的above,bottom和和height:+laderOne.above+,+laderOne.bottom+,+laderOne.height);System.out.println(laderOne的面积:的面积:+area1);System.out.println(laderTwo的的above,bottom和和height:+laderTwo.above+
37、,+laderTwo.bottom+,+laderTwo.height);System.out.println(laderTwo的面积:的面积:+area2);laderOne的的above,bottom和和height:16.0,26.0,100.0laderOne的面积:的面积:2100.0laderTwo的的above,bottom和和height:300.0,500.0,20.0laderTwo的面积:的面积:8000.0运行结果:运行结果:4.5 对象的引用与实体对象的引用与实体 n n当用类创建一个对象时,成员变量被分配内存空间,这些当用类创建一个对象时,成员变量被分配内存空间,这
38、些当用类创建一个对象时,成员变量被分配内存空间,这些当用类创建一个对象时,成员变量被分配内存空间,这些内存空间称做该对象的内存空间称做该对象的内存空间称做该对象的内存空间称做该对象的实体或变量实体或变量实体或变量实体或变量,而对象中存放着引用,而对象中存放着引用,而对象中存放着引用,而对象中存放着引用,以确保这些变量由该对象操作使用。以确保这些变量由该对象操作使用。以确保这些变量由该对象操作使用。以确保这些变量由该对象操作使用。n n如果两个对象有相同的引用,那么就具有同样的实体如果两个对象有相同的引用,那么就具有同样的实体如果两个对象有相同的引用,那么就具有同样的实体如果两个对象有相同的引用
39、,那么就具有同样的实体t1=new Lader(11,22,33);t1=new Lader(11,22,33);11112222aboveabovebottombottomt1t10 xEEE0 xEEE3333heightheight6 61212aboveabovebottombottomt2t20 xFFF0 xFFF1818heightheightt2=new Lader(6,12,18);t2=new Lader(6,12,18);t2=t1;t2=t1;0 xEEE0 xEEEt2=null;t2=null;nullnulln nJavaJava具有具有具有具有“垃圾收集垃圾收集
40、垃圾收集垃圾收集”机制机制机制机制qqJavaJava的运行环境周期地检测某个实体是否已不再被任的运行环境周期地检测某个实体是否已不再被任的运行环境周期地检测某个实体是否已不再被任的运行环境周期地检测某个实体是否已不再被任何对象所引用,如果发现这样的实体,就释放实体占有何对象所引用,如果发现这样的实体,就释放实体占有何对象所引用,如果发现这样的实体,就释放实体占有何对象所引用,如果发现这样的实体,就释放实体占有的内存。的内存。的内存。的内存。qqJavaJava编程人员不必象编程人员不必象编程人员不必象编程人员不必象C+C+程序员那样,要时刻自己检查程序员那样,要时刻自己检查程序员那样,要时刻
41、自己检查程序员那样,要时刻自己检查哪些对象应该释放内存。哪些对象应该释放内存。哪些对象应该释放内存。哪些对象应该释放内存。n n没有实体的对象称作没有实体的对象称作没有实体的对象称作没有实体的对象称作空对象空对象空对象空对象。qq空对象不能使用,即不能让一个空对象去调用方法产生空对象不能使用,即不能让一个空对象去调用方法产生空对象不能使用,即不能让一个空对象去调用方法产生空对象不能使用,即不能让一个空对象去调用方法产生行为。行为。行为。行为。qq假如程序中使用了空对象,程序在运行时会出现异常:假如程序中使用了空对象,程序在运行时会出现异常:假如程序中使用了空对象,程序在运行时会出现异常:假如程
42、序中使用了空对象,程序在运行时会出现异常:NullPointerExceptionNullPointerException。qq由于对象是动态地分配实体,所以由于对象是动态地分配实体,所以由于对象是动态地分配实体,所以由于对象是动态地分配实体,所以JavaJava的编译器对空的编译器对空的编译器对空的编译器对空对象不做检查对象不做检查对象不做检查对象不做检查;因此,在编写程序时要避免使用空对象。因此,在编写程序时要避免使用空对象。因此,在编写程序时要避免使用空对象。因此,在编写程序时要避免使用空对象。返回返回返回返回4.6 成员变量成员变量 n n1 1、成员变量、成员变量、成员变量、成员变量
43、n n成员变量用来刻画类创建对象的属性,分为成员变量用来刻画类创建对象的属性,分为成员变量用来刻画类创建对象的属性,分为成员变量用来刻画类创建对象的属性,分为实例变量实例变量实例变量实例变量和和和和类类类类变量。变量。变量。变量。qq没有使用没有使用没有使用没有使用staticstatic修饰的成员变量称作修饰的成员变量称作修饰的成员变量称作修饰的成员变量称作实例变量实例变量实例变量实例变量。qq用关键字用关键字用关键字用关键字staticstatic修饰的成员变量称作修饰的成员变量称作修饰的成员变量称作修饰的成员变量称作类变量类变量类变量类变量或或或或静态变量静态变量静态变量静态变量。cla
44、ss A class A float x;float x;static int y;static int y;n n实例变量实例变量实例变量实例变量qq不同对象的实例变量互不相同,即分配不同的内存空间,不同对象的实例变量互不相同,即分配不同的内存空间,不同对象的实例变量互不相同,即分配不同的内存空间,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个实例变量不会影响其它对象的相应实例变改变其中一个实例变量不会影响其它对象的相应实例变改变其中一个实例变量不会影响其它对象的相应实例变改变其中一个实例变量不会影响其它对象的相应实例变量。量。量。量。qq实例变量仅仅是与相应的对象关联的变量
45、。实例变量仅仅是与相应的对象关联的变量。实例变量仅仅是与相应的对象关联的变量。实例变量仅仅是与相应的对象关联的变量。qq实例变量必须通过对象访问。实例变量必须通过对象访问。实例变量必须通过对象访问。实例变量必须通过对象访问。A a1=new A();A a1=new A();0 0 x x0 xff0 xffa1a10 0y y0 0 x x0 xdd0 xdda2a23 3A a2=new A();A a2=new A();a1.x=3;a1.x=3;下面程序接上一页程序下面程序接上一页程序n n类变量类变量类变量类变量qq对于类变量而言,所有对象的这个类变量都分配给相同对于类变量而言,所有
46、对象的这个类变量都分配给相同对于类变量而言,所有对象的这个类变量都分配给相同对于类变量而言,所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量就同时改的一处内存,改变其中一个对象的这个类变量就同时改的一处内存,改变其中一个对象的这个类变量就同时改的一处内存,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。变了其它对象的这个类变量。变了其它对象的这个类变量。变了其它对象的这个类变量。qq类变量是和该类所创建的所有对象相关联的变量。类变量是和该类所创建的所有对象相关联的变量。类变量是和该类所创建的所有对象相关联的变量。类变量是和该类所创建的所有对象相关联的变量。
47、qq类变量不仅可以通过某个对象访问,也可以直接通过类类变量不仅可以通过某个对象访问,也可以直接通过类类变量不仅可以通过某个对象访问,也可以直接通过类类变量不仅可以通过某个对象访问,也可以直接通过类名访问。名访问。名访问。名访问。A a1=new A();A a1=new A();0 0 x x0 xff0 xffa1a10 0y y0 0 x x0 xdd0 xdda2a23 3A a2=new A();A a2=new A();a1.x=3;a1.x=3;a2.y=4;a2.y=4;A.y=5;A.y=5;5 5 4 4例例例例4-24-2:两个两个两个两个“Lader”“Lader”对象共
48、享对象共享对象共享对象共享bottombottomclass Lader double above,height;/实例变量实例变量 static double bottom;/类变量类变量 void setAbove(double a)above=a;void setBottom(double b)bottom=b;double getAbove()return above;double getBottom()return bottom;例例例例4-24-2class Example4_2 public static void main(String args)Lader.bottom=60
49、;/Lader的字节码被加载到内存,的字节码被加载到内存,/通过类名操作类变量通过类名操作类变量 Lader laderOne,laderTwo;System.out.println(现在所有现在所有Lader对象的对象的bottom都是都是+Lader.bottom);laderOne=new Lader();laderTwo=new Lader();System.out.println(laderOne的的bottom:+laderOne.getBottom();System.out.println(laderTwo的的bottom:+laderTwo.getBottom();laderO
50、ne.setAbove(11);laderTwo.setAbove(22);laderTwo.setBottom(100);System.out.println(现在所有现在所有Lader对象的对象的bottom都是都是+Lader.bottom);System.out.println(laderOne的的above:+laderOne.getAbove();System.out.println(laderTwo的的above:+laderTwo.getAbove();n n2 2、常量、常量、常量、常量qq如果一个成员变量修饰为如果一个成员变量修饰为如果一个成员变量修饰为如果一个成员变量修饰