JAVA大学实用教程(第二版)附课后练习答案 第4章类与对象.ppt
《JAVA大学实用教程(第二版)附课后练习答案 第4章类与对象.ppt》由会员分享,可在线阅读,更多相关《JAVA大学实用教程(第二版)附课后练习答案 第4章类与对象.ppt(162页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 本章导读本章导读n1.类声明和类体n2.类体的构成n3.构造方法与对象的创建n4.对象的引用与实体n5.成员变量n6.方法 第第4章章 类与对象类与对象n7.方法重载n8.this关键字n9.包n10.import 语句n11.访问权限n12.基本类型数据的类包装n13.反编译和文档生成器序面向对象编程:封装,继承,多态性:一种操作名称的多态性,同名多操作。一种是和继承有关的多态性:指同一个操作被不同类型对象掉用时产生不同的行为。4.1 类声明和类体 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。可以用类创建对象,当使用一个类创建了一个对象时,我们也说
2、给出了这个类的一个实例。在语法上,类由两部分构成:类声明和类体。基本格式为:class 类名 类体的内容 class是关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的Java标识符。两个大括号“”、“”以及之间的内容称作类体。以下是两个类声明的例子。class Dog class 机动车 类的名字不能是Java中的关键字,要符合标识符规定,即名字可以由字母、下划线、数字或美元符号组成,并且第一个字符不能是数字。但给类命名时,最好遵守下列习惯:(1)如果类名使用拉丁字母,那么名字的首字母使用 大写字母,如Hello、Time、,People 等。(2)类名最好容易识别、见
3、名知意。当类名由几个“单词”复合而成时,每个单词的首写字母使用大写,如BeijingTime、AmericanGame、HelloChina等。返回4.2 类体的构成 类体内容可以有2种类型的成员:1成员变量:通过变量声明定义的变量,称作成员变量或域,用来刻画类创建的对象的属性。将在后面的第3节详细地讨论成员变量。2方法:方法是类体的重要成员之一。其中的构造方法是具有特殊地位的方法,供类创建对象时使用,用来给出类所创建的对象的初始状态,另一类方法,可以由类所创建的对象调用,对象调用这些方法操作成员变量形成一定的算法,体现对象具有某种功能。下面是一个类名为“机动车”的类,类体内容的变量定义部分定
4、义了2个float类型的变量:“weight”、“height”和一个int型变量“speed”;方法定义部分定义了3个方法:“changSpeed”、“getWeight”和“getHeight”。成员变量的类型可以是Java中的任何一种数据类型,包括前面学习过的基本类型:整型、浮点型、字符型、数组以及后面要学习的对象及接口。成员变量在整个类内都有效,与它在类体中书写的先后位置无关,例如,前述的机动车类也可以写成:class 机动车 int speed;/变量定义部分。float weight,height;/变量定义部分。void changSpeed(int newSpeed)/方法定义
5、。speed=newSpeed;float getWeight()/方法定义。return weight;float getHeight()/方法定义。return height;在定义类的成员变量时可以同时赋予初值,表明类所创建的对象的初始状态。需要注意的是。对成员变量的操作只能放在方法中,方法可以对成员变量进行操作形成算法,如:class A int a=9;float b=12.6f;void f()a=12;b=12.56f;返回但是不可以这样做:class A int a;float b;a=12;/非法 b=12.56f;/非法void f()返回 因为,a=12是赋值语句,不是数
6、据的声明。类的成员类型中可以有数据和方法,即数据的定义和方法的定义,但没有语句,语句必须放在方法中。但没有语句,语句必须放在方法中。返回4.3构造方法与对象的创建 类中有一部分方法称作构造方法,类创建对象时需使用构造方法,以便给类所创建的对象一个合理的初始状态。构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型,即它是void型,但void必须省略不写。Java允许一个类中有若干个构造方法,但这些构造方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。下面的Rect类有两个构造方法:class Rect double sizdA,siddB;R
7、ect()/无参数构造方法。Rect(double a,double b)/有参数构造方法。sideA=a;sideB=b;double computerArea()return sideA*sideB;double computerGirth()return(sizeA+sideB)*2;当使用一个类创建了一个对象时,我们也说给出了这个类的一个实例。创建一个对象包括对象的声明和为对象分配成员变量两个步骤。1对象的声明。一般格式为:类的名字 对象名字;如:Rect rectangleOne;rectangleOne null2为声明的对象分配成员变量 使用new运算符和类的构造方法为声明的对象
8、分配成员变量,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的,你一定还记得构造方法的名字必须和类名相同这一规定),上述的Rect类提供了2个构造方法,下面都是合法的创建对象的语句:rectangleOne=new Rect();或 rectangleOne=new Rect(10,20);如果类里定义了一个或多个构造方法,那么Java不提 供默认的构造方法。如果上述Rect只提供一个带参数的构造方法,代码:rectangleOne=new Rect();创建对象是非法的。创建对象的代码:rectangleOne=new Rect(10,20);会实现下述两件事:(1)
9、为成员变量分配内存空间,然后执行构造方法中的语句。(2)给出一个信息,已确保这些成员变量是属于对象 rectangleOne的。创建对象就是指为它分配成员变量,并获得一个引用,以确保这些成员变量由它来“操作管理”。为对象分配成员变量后,内存模型由声明对象时的模型图4.1,变成如图4.2所示,箭头示意对象可以操作这些属于自己的成员变量。图4.2 分配实体后的对象sideBsideA 20 100 xAA11RectangleOne3创建多个不同的对象 一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的内存空间,因此,改变其中一个对象的状态不会影响其它对象的状态。例如,我们使
10、用前面的Rect类创建两个对象:rectangleOne、rectangleTwo。rectangleOne=new Rect(10,20);rectangleTwo=new Rect(33,66);当创建对象rectangleOne时,Rect类中的成员变量sizeA、sizeB被分配内存空间,并返回一个引用给ectangleOne;当再创建一个对象rectangleTwo时,Rect类中的成员 变量sizeA、sizeB再一次被分配内存空间,并返回一个 引用给rectangleTwo。内存模型如图4.3所示。sideBsideA 20 100 xAA11rectangleOne图4.3 创
11、建多个对象sideBsideA 66 330 xBB42rectangleTwo 4使用对象 对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。通过使用运算符“.”,对象可以实现对自己的变量访问 和方法的调用。(1)对象操作自己的变量(对象的属性)(2)对象调用类中的方法(对象的功能)下面例子1中,“Lader”类创建了2个对象:laderOne,laderTwo。返回class Lader double above,bottom,height;Lader(double a,double b,double h)above=
12、a;bottom=b;height=h;public void setAbove(double a)above=a;public void setBottom(double b)bottom=b;public void setHeight(double h)height=h;double computeArea()return(above+bottom)*height/2.0;public class Example public static void main(String args)double area1,area2=0;Lader laderOne,laderTwo;laderOne
13、=new Lader(5,10,12);laderTwo=new Lader(10,20.45,20);area1=laderOputeArea();area2=laderTputeArea();System.out.printf(laderOne和laderTwo的面积分别是:%n%f,%fn,area1,area2);laderOne.setAbove(10);laderTwo.setBottom(40);area1=laderOputeArea();area2=laderTputeArea();System.out.printf(laderOne和laderTwo的面积分别是:%n%f,
14、%fn,area1,area2);4.4 对象的引用与实体 我们已经知道,当用类创建一个对象时,成员变量被分配内存空间,这些内存空间称做该对象的实体或变量,而对象中存放着引用,以确保这些变量由该对象操作使用。因此,如果两个对象有相同的引用,那么就具有同样的实体。假如使用例子1“Lader”类的构造方法创建了两个对象 t1,t2。t1=new Lader(11,22,33);t2=new Lader(6,12,18);如果程序中使用了如下的赋值语句:t1=t2;则:内存中引用t2,t1都指向了t2,t1无引用。Java具有“垃圾收集”机制,Java的运行环境周期地检测某个实体是否已不再被任何对象
15、所引用,如果发现这样的实体,就释放实体占有的内存。因此,Java编程人员不必象C+程序员那样,要时刻自己检查哪些对象应该释放内存。当把变量t2中存放的引用赋给t1后,最初分配给对象t1的成员变量(实体)所占有的内存就会被释放。没有实体的对象称作空对象。空对象不能使用,即不能让一个空对象去调用方法产生行为。假如程序中使用了空对象,程序在运行时会出现异常:NullPointerException。由于对象是动态地分配实体,所以Java的编译器对空对象不做检查。因此,在编写程序时要避免使用空对象。返回4.5 成员变量 用关键字static修饰的成员变量称作静态变量或类变量,而没有使用static修饰
16、的成员变量称作实例变量。例如,下述A类中,x是实例变量,而y是类变量。class A float x;static int y;类变量是与类相关联的数据变量,也就是说,类变量是和该类所创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。因此,类变量不仅可以通过某个对象访问也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量必须通过对象访问。下面例子2中,两个“Lader”对象共享bottom。效果如图4.7 class L
17、ader float above,height;/实例变量。static float bottom;/类变量。void setAbove(float a)above=a;void setBottom(float b)bottom=b;float getAbove()return above;float getBottom()return bottom;class Example public static void main(String args)Lader.bottom=60;/Lader的字节码被加载到内存,通过类名操作类变量。System.out.println(现在所有Lader对象
18、的bottom都是+Lader.bottom);Lader laderOne,laderTwo;laderOne=new Lader();laderTwo=new Lader();System.out.println(laderOne的bottom:+laderOne.getBottom();System.out.println(laderTwo的bottom:+laderTwo.getBottom();laderOne.setAbove(11);laderTwo.setAbove(22);laderTwo.setBottom(100);System.out.println(现在所有Lader
19、对象的bottom都是+Lader.bottom);System.out.println(laderOne的above:+laderOne.getAbove();System.out.println(laderTwo的above:+laderTwo.getAbove();2常量 如果一个成员变量修饰为final,就是常量,常量的名字习惯用大写字母,例如:final int MAX;final修饰的成员变量不占用内存,这意味着在声明final成员变量时,必须要初始化。对于final修饰的成员变量,对象可以操作使用,但不能做更改操作。下面的例子给出了常量的用法。效果如图4.9 class Tom
20、final int MAX=100;static final int MIN=20;class Example public static void main(String args)System.out.println(Tom.MIN);Tom tom=new Tom();int x=0;x=Tom.MIN+tom.MAX;System.out.println(x);返回4.6 方法 我们已经知道,类体内容可以有2种类型的成员:成员变量和方法。其中一部分方法称作构造方法,供类创建对象时使用,用来给出类所创建的对象的初始状态。另一部分方法可分为实例方法和类方法,类所创建的对象可以调用这些方法形
21、成一定的算法,体现对象具有某种功能。当对象调用方法时,方法中出现的成员变量就是指分配给该对象的成员变量。对象不可以调用构造方法,构造方法是专门用来创建对象的。方法的定义包括两部分:方法声明和方法体。一般格式为:方法声明部分 方法体的内容1方法声明和方法体最基本的方法声明包括方法名和方法的返回类型,返回类型也简称作方法的类型。如:float area().方法的名字必须符合标识符规定。在给方法起名字时应遵守以下习惯:名字如果使用拉丁字母,首写字母使用小写。如果由多个单词组成,从第2个单词开始的其它单词的首写字母使用大写。例如 float getTrangleArea()void setCircl
22、eRadius(double radius)等。方法声明之后的一对大括号“”、“”以及之间的内容称作方法的方法体。类中的方法必须要有方法体,如果方法的类型是void类型,方法体中也可以不书写任何语句。2方法体的构成 方法体的内容包括变量的定义和合法的Java语句,在方法体中声明的变量以及方法的参数称作局部变量,局部变量仅仅在该方法内有效。方法的参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。写一个方法和C语言中写一个函数完全类似,只不过在这里称作方法。局部变量的名字必须符合标识符规定,遵守习惯:名字如果使用拉丁字母,首写字母使用小写。如果由多个单词组成,从第2个单词开始的
23、其它单词的首写字母使用大写。3实例方法与类方法 除构造方法外,其他的方法可分为实例方法和类方法。方法声明中用关键字static修饰的称作类方法或静态方法,不用static修饰的称作实例方法。一个类中的方法可以互相调用:实例方法可以调用该类中实例方法或类方法;类方法只能调用该类的类方法,不能调用实例方法;如:class A float a,b;void sum(float x,float y)a=max(x,y);b=min(x,y);static float getMaxSqrt(float x,float y)float c;c=max(x,y)*max(x,y);return c;stat
24、ic float max(float x,float y)return xy?x:y;float min(float x,float y)return xb?a:b;class Example public static void main(String args)double max=Computer.max(12,45);/类名调用类方法。System.out.println(max);4参数传值 当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。如果向方法的int型参
25、数x传递一个int值,那么参数x得到的值是传递值的拷贝。方法如果改变参数的值,不会影响向参数“传值”的变量的值。(1)基本数据类型参数的传值 下面的例子5中,向一个方法的基本型参数传值。效果如图4.11 class Tom void f(int x,double y)x=x+1;y=y+1;System.out.printf(参数x和y的值分别是:%d,%fn,x,y);public class Example public static void main(String args)int x=10;double y=12.58;Tom tom=new Tom();tom.f(x,y);/方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA大学实用教程第二版附课后练习答案 第4章类与对象 JAVA 大学 实用教程 第二 课后 练习 答案 对象
限制150内