(精品)第四章类、对象和方法.ppt

上传人:gsy****95 文档编号:85522188 上传时间:2023-04-11 格式:PPT 页数:58 大小:272.01KB
返回 下载 相关 举报
(精品)第四章类、对象和方法.ppt_第1页
第1页 / 共58页
(精品)第四章类、对象和方法.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《(精品)第四章类、对象和方法.ppt》由会员分享,可在线阅读,更多相关《(精品)第四章类、对象和方法.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第4章 类、对象和方法内容提要o了解类的基础知识o了解如何创建对象o理解如何向引用变量赋值o创建方法,返回值,并且使用参数o使用构造函数o理解newo理解垃圾回收和终止器o使用this关键字4.1 类的基础知识o所有的Java程序活动都发生在一个类中o类是一个定义对象形式的模板o类指定了数据,及操作数据的代码o使用类的规范来构造对象o对象是类的实例o类是一系列指定如何建造对象的计划o类是一个逻辑抽象4.1.1类的基本形式class classname /declare instance variables type var1;type var2;/type varN;/declare meth

2、ods type method1(parameters)/body of method type method2(parameters)/body of method /type methodN(parameters)/body of method 4.1.2 定义类o开发一个封装汽车信息的类o该类名为Vehicle,它存储了汽车的三个信息项:载客数量、油箱容量和耗油均值(每加仑行驶的英里数)class Vehicle int passengers;/number of passengers int fuelcap;/fuel capacity in gallons int mpg;/fuel

3、 consumption in miles per gallon4.1.2 定义类oclass定义创建了一种新的数据类型(Vehicle)oclass声明只是一个类型描述,它不创建任何实际的对象o创建Vehicle对象需使用下面语句Vehicle minivan=new Vehicle();4.1.2 定义类o每次创建类的实例时,都可以创建一个包含类定义的实例变量副本的对象。o为访问这些变量,可以使用点(.)运算符。点运算符将对象名和成员名链接在一起。o点运算符的基本形式如下:object.member;class Vehicle int passengers;/number of passe

4、ngers int fuelcap;/fuel capacity in gallons int mpg;/fuel consumption in miles per gallon /This class declares an object of type Vehicle.class VehicleDemo public static void main(String args)Vehicle minivian=new Vehicle();int range;/assign value to fields in minivian minivian.passengers=7;minivian.f

5、uelcap=16;minivian.mpg=21;/compute the range assuming a full tank of gas range=minivian.fuelcap*minivian.mpg;System.out.println(Minivan can carry+minivian.passengersminivian.passengers+with a range of+range);注意使用点运算符来访问成员4.1.2 定义类o因为每个对象都有类定义的自己的实例变量副本,所以一个对象的变量的内容与另一对象的变量内容是不同的o两个对象除了都是同一类型的对象以外,它们

6、之间没有什么联系。class Vehicle int passengers;/number of passengers int fuelcap;/fuel capacity in gallons int mpg;/fuel consumption in miles per gallon /This class declares an object of type Vehicle.class TwoVehicle public static void main(String args)Vehicle minivian=new Vehicle();Vehicle sportscar=new Veh

7、icle();int range1,range2;/assign value to fields in minivian minivian.passengers=7;minivian.fuelcap=16;minivian.mpg=21;/assign value to fields in sportscar sportscar.passengers=2;sportscar.fuelcap=14;sportscar.mpg=12;/compute the range assuming a full tank of gas range1=minivian.fuelcap*minivian.mpg

8、;range2=sportscar.fuelcap*sportscar.mpg;System.out.println(Minivan can carry+minivian.passengers+with a range of+range1);System.out.println(Sportscar can carry+sportscar.passengers+with a range of+range2);minivian和sportcar代表独立的对象问题o一个类包含哪两项内容?o通过对象访问类的成员应使用什么运算符?o每个对象都有类的 副本。4.2 如何创建对象oVehicle miniv

9、an=new Vehicle();o该声明完成两个功能。n它声明一个名为minivan的类Vehicle类型的变量。该变量没有定义对象,它只是一个可以引用对象的变量n声明创建了对象的一个实际的副本,并把对象的引用赋给了minivan。这些都是由new运算符完成的4.2 如何创建对象onew运算符为对象动态分配内存,并返回一个对它的引用。该引用是由new分配的对象内存的地址。然后,把引用存储在变量中。o在Java中,必须动态分配所有的类对象。o两个步骤可以分开重写,如下所示:Vehicle minivan;/declare reference to objectminivan=new Vehic

10、le();/allocate a Vehicle object4.3 引用变量和赋值o当把一个简单类型的变量赋给另一个变量时,等号左边的变量接收右边的变量值的副本。o当把对象赋给其他变量时,是在改变引用变量所引用的对象。例如:Vehicle car1=new Vehicle();Vehicle car2=car1;car1.mpg=26;System.out.println(car1.mpg);System.out.println(car2.mpg);4.3 引用变量和赋值o尽管car1和car2都引用相同的对象,但它们之间是没有关系的。例如:Vehicle car1=new Vehicle(

11、);Vehicle car2=car1;Vehicle car3=new Vehicle();car2=car3;/now car2 and car3 refer to the same object.问题o解释当一个对象引用变量被赋给另一个对象引用变量时会发生什么?o假设一个类名为MyClass,试写出如何创建一个名为ob的对象。4.4 方法o方法是操作类定义的数据,以及多数情况下提供对数据的访问的子例程。o多数情况下,程序的其他部分都是通过类的方法来与类进行交互的。o一个方法包含一个或多个语句。o每个方法只执行一项任务。o每个方法只有一个名称,而方法也是通过使用这个名称被调用。可以为方法任

12、意命名。4.4 方法o方法的基本形式如下:ret-type name(parameter-list)/body of methodnret-type指定了方法返回的数据类型,可以是任何有效类型;如果不返回值,它的返回类型必须为voidn方法名由name指定,可以说任何合法的,并且是当前作用域中没有被其他方法使用的标识符nparameter-list是一系列用逗号隔开的类型与标识符对。参数本质上是在调用方法时接传递到方法的变元的值的变量。如果方法没有参数,参数表为空。向Vehicle类添加方法o考虑前面通过将耗油率和油箱容量相乘来计算汽车的行驶里程的main(),这不是处理这种计算的最好方法。o

13、这种计算最好由Vehicle类自己来处理,原因是:油箱容量、燃油率,这两个数据都被封装在Vehicle类中。通过向Vehicle类添加一个计算行驶里程的方法,可以增强它的面向对象结构。向Vehicle类添加方法/Add range to Vehicle.class Vehicleint passengers;/number of passengers int fuelcap;/fuel capacity in gallons int mpg;/fuel consumption in miles per gallon /Display the range.void range()System.o

14、ut.println(Range is+fuelcap*mpg);range()方法包含在Vehicle类中fuelcap和mpg是直接使用的,没有利用点运算符class AddMeth public static void main(String args)Vehicle minivian=new Vehicle();Vehicle sportscar=new Vehicle();int range1,range2;/assign value to fields in minivian minivian.passengers=7;minivian.fuelcap=16;minivian.mp

15、g=21;/assign value to fields in sportscar sportscar.passengers=2;sportscar.fuelcap=14;sportscar.mpg=12;System.out.println(Minivan can carry+minivian.passengers);minivian.range();/display range of minivan System.out.println(Sportscar can carry+sportscar.passengers);sportscar.range();/display range of

16、 sportscar.向Vehicle类添加方法o一个很重要的细节:没有在实例变量fuelcap和mpg的前面添加对象名或点运算符就直接引用了它们。o当一个方法使用由它的类定义的示例变量时,可以直接使用,无需显式引用对象,也无需使用点运算符。o原因:方法总是被与其相关的类的对象调用。一旦调用发生,对象就被知晓。4.5 从方法返回值o引起方法返回的条件有两个:n当遇到方法的闭花括号时n当执行return语句时oreturn语句有两种形式:n用在void方法(它是不返回值的)中n用于返回值的方法中4.5 从方法返回值o在void方法中,可通过以下形式的return语句使方法中断执行:return;

17、o当语句执行时,程序控制权跳过方法中其余的代码返回给调用者,例如:void myMeth()int i;for(i=0;iv2.range()System.out.println(“v1 has greater range”);4.7 使用参数o调用方法时,可以向方法传递一个或多个值o向方法传递的值称为变元o在方法中接收变元的变量称为参数o参数声明在方法名后的圆括号中o参数声明语法与用于变量的语法一样o参数位于自己方法的作用域中/A simple example that uses a parameter.class ChkNum/return true if x is evenboolean

18、 isEven(int x)if(x%2)=0)return true;else return false;class ParmDemopublic static void main(String args)ChkNum e=new ChkNum();if(e.isEven(10)System.out.println(10 is even.);if(e.isEven(9)System.out.println(9 is even);if(e.isEven(8)System.out.println(8 is even);x是isEven的整型参数传递变元给isEven()4.7 使用参数o一个方法

19、可以有多个参数o声明参数时,只需用逗号将参数分隔开oFactor类定义了一个名为isFactor()的方法,用于确定第一个参数是否是第二个参数的因数4.7 使用参数class Factorboolean isFactor(int a,int b)if(b%a)=0)return true;else return false;class IsFactorpublic static void main(String args)Factor x=new Factor();if(x.isFactor(2,20)System.out.println(2 is factor);if(x.isFactor(

20、3,20)System.out.println(this wont be displayed);该方法有两个参数向isFactor()传递两个变元4.7 使用参数o注意,在调用isFactor()时,变量也是用逗号分隔的。o在使用多个参数时,每个参数都指定了自己的类型,这些类型可以相互不同,例如:int myMeth(int a,double b,float c)/向Vehicle添加一个带参数的方法o添加新功能:计算给定距离所需的耗油总量o方法名为fuelneeded(),该方法获取要行驶的英里数,返回需要汽油的加仑数。ofuelneeded()定义如下:double fuelneeded(

21、int miles)return(double)miles/mpg;源程序源程序问题o何时必须通过一个使用点运算符的对象引用来访问实例变量?o解释变元与参数之间的不同o解释方法返回给调用者的两种途径练习4-1 创建Help类o类的本质类封装了功能o类通常用来建造大型应用程序的代码块o每个类必须表示一个执行描述清晰的动作的功能单元o类不能太小,也不能包含与类无关的功能练习4-1 创建Help类o改写练习3-3为一个Help类,好处:o帮助系统定义了一个逻辑单元o想提供什么帮助系统,只需实例化一个帮助对象o更新或修改帮助都不会对使用它的程序产生副作用练习4-1 创建Help类o清楚组成帮助系统的各

22、个部分n用于显示菜单、输出用户选择、检查响应有效性以及显示所选项信息,程序循环执行,直到输入qn其中菜单、检查响应有效性以及信息显示是构成帮助系统不可缺少的部分n获得用户输入,重复请求是否应该被处理则不是必需的练习4-1 创建Help类o步骤:n创建helpon()方法,显示帮助信息n创建showmenu()方法,帮助菜单n创建isvalid()方法,检查响应有效性n把前面的方法加入help类中n重写main()方法,以使其使用新的Help类源程序源程序4.8 构造函数o实例变量需要使用一组语句来手动设置o更好的方法使用构造函数o构造函数在创建对象时初始化对象o它的名称与类名相同,在语法上与方

23、法相似o构造函数没有显式返回类型o用来为类定义的初值赋值,或执行其他创建完整对象所需要的启动过程4.8 构造函数o无论是否定义,所有的类都有构造函数oJava自动提供了一个默认的构造函数来初始化所有的成员变量为0。o一旦定义自己的构造函数,就不会载使用默认构造函数了4.8 构造函数/A simple constructor.class MyClassint x;MyClass()x=10;class ConsDemopublic static void main(String args)MyClass t1=new MyClass();MyClass t2=new MyClass();Syst

24、em.out.println(t1.x+t2.x);这是MyClass的构造函数4.9 带参数的构造函数o向构造函数添加参数的方式与向方法添加参数的方式一样:只需在构造函数名称后的圆括号内声明参数即可4.9 带参数的构造函数/A parameterized constructor.class MyClassint x;MyClass(int i)x=i;class ParmConsDemopublic static void main(String args)MyClass t1=new MyClass(10);MyClass t2=new MyClass(88);System.out.pri

25、ntln(t1.x+t2.x);该构造函数有一个参数向Vehicle类添加一个构造函数/Add a constructor.class Vehicleint passengers;/number of passengers int fuelcap;/fuel capacity in gallons int mpg;/fuel consumption in miles per gallon/This is a constructor for Vehicle.Vehicle(int p,int f,int m)passengers=p;fuelcap=f;mpg=m;/Return the ran

26、ge.int range()return mpg*fuelcap;/Compute fuel needed for a given distance.double fuelneeded(int miles)return(double)miles/mpg;Vehicle的构造函数class VehConsDemopublic static void main(String args)/construct complete vehiclesVehicle minivan=new Vehicle(7,16,21);Vehicle sportscar=new Vehicle(2,14,12);doub

27、le gallons;int dist=252;gallons=minivian.fuelneeded(dist);System.out.println(To go“+dist+miles minivan needs+gallons+gallons of fuel.);gallons=sportscar.fuelneeded(dist);System.out.println(To go“+dist+miles sportdcar needs“+gallons+gallons of fuel.);问题o什么是构造函数,何时执行构造函数?o构造函数有返回类型吗?4.10 深入介绍new运算符one

28、w运算符的基本形式如下:class-var=new class-name();nclass-var是一个要创建的类类型的变量;nclass-name是被初始化的类的类名n圆括号指定了类的构造函数o如果类不定义自己的构造函数,那么new将使用Java默认的构造函数。onew可以用于创建任何类类型的对象。4.10 深入介绍new运算符o因为内存是有限的,由于内存不足,new可能无法为对象分配内存,这时就会发生一个运行时异常。4.11 垃圾回收与终止器 o动态分配内存方案的关键是回收无用的对象所占的内存,以使内存用于后面的分配。oJava使用方便的方法垃圾回收。o垃圾回收系统会自动回收对象,透明地在

29、后台操作,无需程序员的干预。o工作方式:当不存在对某对象的任何引用时,该对象就被认定为没有存在的必要了,它所占用的内存就要被释放。被回收的内存可以被用于下面的分配。4.11 垃圾回收与终止器o垃圾回收只在存在一个或多个不再使用的对象时才发生(偶尔发生)。o需满足两个条件:n有对象要回收n需要回收这些对象o垃圾回收要占用时间o无法知道垃圾回收发生的准确时间finalize()方法ofinalize()方法用于确保对象完全终止o在对象最后被垃圾回收器销毁之前调用ofinalize()方法中,要指定在对象被销毁前必须执行的动作ofinalize()方法的基本形式:protected void fin

30、alize()/finalization code herenprotected是一个防止类以外的代码访问finalize()的说明符finalize()方法o调用finalize()是在垃圾回收之前o当对象不在作用域中时,是不会调用它o不知道何时执行finalize()o把它作为一个“后备”过程来确保对某些资源的合理处理,或用于特殊用途的应用程序,而不是程序在普通操作中使用的方法练习4-2 演示垃圾回收o垃圾回收只是在后台偶尔运行一次o通常是在有许多无用对象时o为了演示finalize()方法,需创建、销毁大量的对象源代码源代码4.12 this关键字o当调用一个方法时,会向它自动传递一个隐

31、式变量,它是对调用对象的一个引用。这个引用叫做thiso考虑程序:创建一个Pwr类,该类计算数值不同幂的结果。oreturn val;return this.val;4.12 this关键字o使用this引用编写的完整的Pwr类:class Pwrdouble b;int e;double val;Pwr(double base,int exp)this.b=base;this.e=exp;this.val=1;if(exp=0)return;for(;exp0;exp-)this.val=this.val*this.base;double get_val()return this.val;4.12 this关键字othis有一些重要用途n例如:Java语法允许一个参数名或一个局部变量名与实例变量名一致。这时,局部变量名会隐藏实例变量。通过使用this,就可以得到访问隐藏实例变量的访问权Pwr(double b,int e)this.b=b;this.e=e;val=1;if(e=0)return;for(;e0;e-)val=val*b;它引用b实例变量,而不是参数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁