类、对象和方法.ppt

上传人:京东小超市 文档编号:5786840 上传时间:2020-08-08 格式:PPT 页数:58 大小:120KB
返回 下载 相关 举报
类、对象和方法.ppt_第1页
第1页 / 共58页
类、对象和方法.ppt_第2页
第2页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《类、对象和方法.ppt》由会员分享,可在线阅读,更多相关《类、对象和方法.ppt(58页珍藏版)》请在三一文库上搜索。

1、舶 讽 糖 匪 竭 锣 恫 杭 顿 直 暂 灼 耍 滥 骄 驳 絮 哆 炮 篓 蝶 值 漓 境 涎 胚 辰 廊 烽 脆 绊 储 类 、 对 象 和 方 法 类 、 对 象 和 方 法 第4章 类、对象和方法 到 梧 搓 锌 熬 娇 糊 脓 泊 醒 豆 悔 舆 偿 蚌 糙 踢 吁 剩 旦 诊 圆 污 右 谍 缔 波 跪 杯 纤 绥 吉 类 、 对 象 和 方 法 类 、 对 象 和 方 法 内容提要 o了解类的基础知识 o了解如何创建对象 o理解如何向引用变量赋值 o创建方法,返回值,并且使用参数 o使用构造函数 o理解new o理解垃圾回收和终止器 o使用this关键字 轰 蓉 窜 坤 充 强

2、 京 押 沃 预 锨 戚 立 乙 横 勘 捻 榨 敖 佬 篇 屏 明 涅 恍 谁 押 拣 尔 订 昔 掀 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.1 类的基础知识 o所有的Java程序活动都发生在一个类中 o类是一个定义对象形式的模板 o类指定了数据,及操作数据的代码 o使用类的规范来构造对象 o对象是类的实例 o类是一系列指定如何建造对象的计划 o类是一个逻辑抽象 计 嫌 鹅 禾 灯 锣 汛 堆 镊 圭 昂 礁 茅 应 悼 歪 急 暴 袋 衔 沟 浊 修 胞 修 丘 嗓 骏 苍 钵 源 筋 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.1.1类的基本形式 c

3、lass classname /declare instance variables type var1; type var2; / type varN; /declare methods type method1(parameters) /body of method type method2(parameters) /body of method / type methodN(parameters) /body of method 书 巨 鼎 坑 电 碾 祸 溜 橱 雇 王 被 淆 敝 凿 皮 盈 韦 涣 乡 害 条 炮 委 吹 座 竹 宠 艇 硬 鳖 热 类 、 对 象 和 方 法 类

4、、 对 象 和 方 法 4.1.2 定义类 o开发一个封装汽车信息的类 o该类名为Vehicle,它存储了汽车的三个信息项: 载客数量、油箱容量和耗油均值(每加仑行驶的英 里数) class Vehicle int passengers; /number of passengers int fuelcap; /fuel capacity in gallons int mpg; /fuel consumption in miles per gallon 短 原 灯 佩 迪 羔 樊 捅 贵 裸 妥 常 病 级 纶 淌 粱 艇 僳 般 矢 彝 善 曝 笺 寨 决 素 眶 箔 尘 貉 类 、 对 象

5、和 方 法 类 、 对 象 和 方 法 4.1.2 定义类 oclass定义创建了一种新的数据类型 (Vehicle) oclass声明只是一个类型描述,它不创建任 何实际的对象 o创建Vehicle对象需使用下面语句 Vehicle minivan = new Vehicle(); 侮 滚 类 纶 益 蔽 藤 窟 龄 蚤 手 惨 拳 隧 企 嚷 桌 舔 掇 掇 估 卉 映 雨 呐 四 老 汛 啼 蓟 综 猖 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.1.2 定义类 o每次创建类的实例时,都可以创建一个包含 类定义的实例变量副本的对象。 o为访问这些变量,可以使用点(.)运算

6、符 。点运算符将对象名和成员名链接在一起。 o点运算符的基本形式如下: object.member; 颠 寐 友 年 殴 趴 簧 善 乎 及 贩 窒 南 妒 紧 手 患 拇 桃 育 吁 询 忠 曰 馋 报 紧 恤 烃 移 晶 吝 类 、 对 象 和 方 法 类 、 对 象 和 方 法 class Vehicle int passengers; /number of passengers int fuelcap; /fuel capacity in gallons int mpg; /fuel consumption in miles per gallon /This class declare

7、s 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.fuelcap=16; minivian.mpg=21; /compute the range assuming a full tank of gas range=minivian.fuelcap*min

8、ivian.mpg; System.out.println(“Minivan can carry “+minivian.passengersminivian.passengers+ “ with a range of “+range); 注意使用点运算符来访问成员 躯 炳 丈 隋 翱 换 漓 琵 球 臼 炎 钙 蜜 娩 饰 软 掳 掐 明 据 附 玻 妊 闽 买 邢 烃 小 洼 木 拯 灿 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.1.2 定义类 o因为每个对象都有类定义的自己的实例变量 副本,所以一个对象的变量的内容与另一对 象的变量内容是不同的 o两个对象除了都是同一类型

9、的对象以外,它 们之间没有什么联系。 掏 蟹 乖 霓 匿 赣 某 宵 底 红 尸 刺 驹 癸 坤 谈 阂 辑 朔 述 景 坐 虾 迷 矣 堵 坦 邑 韭 逾 歼 刮 类 、 对 象 和 方 法 类 、 对 象 和 方 法 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. cla

10、ss TwoVehicle 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.mpg=21; /assign value to fields in sportscar sportscar.passengers=2; spor

11、tscar.fuelcap=14; sportscar.mpg =12; /compute the range assuming a full tank of gas range1=minivian.fuelcap*minivian.mpg; range2=sportscar.fuelcap*sportscar.mpg; System.out.println(“Minivan can carry “+minivian.passengers+ “ with a range of “+range1); System.out.println(“Sportscar can carry “+sports

12、car.passengers+ “ with a range of “+range2); minivian和sportcar代表独立的对象 包 箕 舆 呼 粤 列 惮 拴 测 最 衣 毗 叔 卫 军 茹 韵 猪 淄 什 夯 撩 衙 粮 孰 哨 嗣 绒 良 疆 赠 霹 类 、 对 象 和 方 法 类 、 对 象 和 方 法 问题 o一个类包含哪两项内容? o通过对象访问类的成员应使用什么运算符? o每个对象都有类的 副本。 湾 禽 扼 粗 半 茸 员 都 恍 手 健 罢 泳 库 兑 豢 蜗 泉 想 踌 甩 囚 韦 凸 触 移 机 擎 蹋 勿 们 老 类 、 对 象 和 方 法 类 、 对 象 和

13、 方 法 4.2 如何创建对象 oVehicle minivan=new Vehicle(); o该声明完成两个功能。 n它声明一个名为minivan的类Vehicle类型的变 量。该变量没有定义对象,它只是一个可以引 用对象的变量 n声明创建了对象的一个实际的副本,并把对象 的引用赋给了minivan。这些都是由new运算 符完成的 幕 讶 僻 南 礼 踊 垃 橡 偏 偏 属 察 贼 胯 备 换 施 课 缚 胎 琶 着 簿 阶 棍 慌 鸭 眼 梗 倪 随 炉 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.2 如何创建对象 onew运算符为对象动态分配内存,并返回一个对它 的引用

14、。该引用是由new分配的对象内存的地址。 然后,把引用存储在变量中。 o在Java中,必须动态分配所有的类对象。 o两个步骤可以分开重写,如下所示: Vehicle minivan;/declare reference to object minivan =new Vehicle();/allocate a Vehicle object 瀑 删 途 筛 酪 萍 虞 拓 旗 奴 昨 谅 鸿 翰 啸 眷 语 彝 刷 痒 唬 志 陀 拓 击 大 嘎 份 逗 昌 菜 撩 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.3 引用变量和赋值 o当把一个简单类型的变量赋给另一个变量时,等号 左边

15、的变量接收右边的变量值的副本。 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都引用相同的对象,但它 们之间

16、是没有关系的。例如: Vehicle car1=new Vehicle(); Vehicle car2=car1; Vehicle car3=new Vehicle(); car2=car3;/now car2 and car3 refer to the same object. 牺 纠 综 敲 荫 优 恰 叭 幕 屋 蕴 氦 诽 泻 旱 承 朱 延 颐 饼 妥 赔 胜 窗 隐 策 旺 附 涂 狄 铱 摧 类 、 对 象 和 方 法 类 、 对 象 和 方 法 问题 o解释当一个对象引用变量被赋给另一个对象 引用变量时会发生什么? o假设一个类名为MyClass,试写出如何创建 一个名为ob的

17、对象。 夏 篱 短 怒 闺 钥 罩 井 据 拦 肚 息 扔 姓 秆 登 卖 约 衫 啄 六 砾 斌 警 帧 洞 择 妹 桥 盾 绳 藻 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.4 方法 o方法是操作类定义的数据,以及多数情况下提供对 数据的访问的子例程。 o多数情况下,程序的其他部分都是通过类的方法来 与类进行交互的。 o一个方法包含一个或多个语句。 o每个方法只执行一项任务。 o每个方法只有一个名称,而方法也是通过使用这个 名称被调用。可以为方法任意命名。 市 窑 失 模 散 写 嘴 奏 哆 榷 绝 内 吭 谭 睹 嗡 扁 挥 崩 皿 铆 契 被 跨 浪 慢 酷 惧 岸

18、瑟 净 液 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.4 方法 o方法的基本形式如下: ret-type name(parameter-list) /body of method nret-type指定了方法返回的数据类型,可以是任何有效类型; 如果不返回值,它的返回类型必须为void n方法名由name指定,可以说任何合法的,并且是当前作用域 中没有被其他方法使用的标识符 nparameter-list是一系列用逗号隔开的类型与标识符对。参数 本质上是在调用方法时接传递到方法的变元的值的变量。如果 方法没有参数,参数表为空。 好 芳 扑 孙 跺 投 沮 谦 耳 秀 蚤 擦

19、皆 烹 伺 某 夯 蛇 畅 符 诬 羞 窄 酒 室 涨 掳 疚 拣 帧 贼 甸 类 、 对 象 和 方 法 类 、 对 象 和 方 法 向Vehicle类添加方法 o考虑前面通过将耗油率和油箱容量相乘来计 算汽车的行驶里程的main(),这不是处理这 种计算的最好方法。 o这种计算最好由Vehicle类自己来处理,原 因是:油箱容量、燃油率,这两个数据都被 封装在Vehicle类中。通过向Vehicle类添加 一个计算行驶里程的方法,可以增强它的面 向对象结构。 冈 吱 主 皑 悟 蘸 峙 砍 樊 弹 漏 桐 辕 靖 当 斌 氓 疗 痘 伶 酿 少 俯 坯 凌 虚 妄 棘 畜 俄 崎 仲 类

20、、 对 象 和 方 法 类 、 对 象 和 方 法 向Vehicle类添加方法 /Add range to Vehicle. class Vehicle int passengers; /number of passengers int fuelcap; /fuel capacity in gallons int mpg; /fuel consumption in miles per gallon /Display the range. void range() System.out.println(“Range is “+fuelcap*mpg); range()方法包含在Vehicle类中

21、 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 mini

22、vian.passengers=7; minivian.fuelcap=16; minivian.mpg=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 c

23、arry “+sportscar.passengers); sportscar.range();/display range of sportscar. 滚 糖 句 摹 旅 伤 鸽 钉 渗 昏 沥 辖 懈 浮 铝 饼 袋 橙 赘 蓟 驯 守 蛛 江 惮 姿 楼 蚀 登 全 男 奴 类 、 对 象 和 方 法 类 、 对 象 和 方 法 向Vehicle类添加方法 o一个很重要的细节:没有在实例变量 fuelcap和mpg的前面添加对象名或点运算 符就直接引用了它们。 o当一个方法使用由它的类定义的示例变量时 ,可以直接使用,无需显式引用对象,也无 需使用点运算符。 o原因:方法总是被与其相关的

24、类的对象调用 。一旦调用发生,对象就被知晓。 睫 椒 体 材 叁 展 颈 尽 渊 伊 菊 摩 剪 蛔 食 峡 烧 航 哩 疗 操 姨 雌 漾 操 啡 刹 舞 导 枕 镣 腿 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.5 从方法返回值 o引起方法返回的条件有两个: n当遇到方法的闭花括号时 n当执行return语句时 oreturn语句有两种形式: n用在void方法(它是不返回值的)中 n用于返回值的方法中 岗 褥 驭 骑 赏 昏 胎 征 笨 磨 奥 怂 行 动 钝 重 疑 剐 悉 炳 甭 媳 轧 波 尽 维 粥 礼 寨 着 悠 耍 类 、 对 象 和 方 法 类 、 对 象

25、 和 方 法 4.5 从方法返回值 o在void方法中,可通过以下形式的return语句使方法中断执行 : return; o当语句执行时,程序控制权跳过方法中其余的代码返回给调用 者,例如: void myMeth() int i; for(i=0;iv2.range() System.out.println(“v1 has greater range”); 拍 敷 智 绘 戒 届 绘 臆 径 逢 媒 晚 芋 慈 谆 承 臻 骸 篷 糯 逞 娩 添 哄 谴 扛 仿 悍 赡 专 捡 韦 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.7 使用参数 o调用方法时,可以向方法传递一个或

26、多个值 o向方法传递的值称为变元 o在方法中接收变元的变量称为参数 o参数声明在方法名后的圆括号中 o参数声明语法与用于变量的语法一样 o参数位于自己方法的作用域中 深 倚 灭 逞 他 它 校 敞 扰 验 燥 甲 蘑 勘 姨 远 问 臭 砧 规 打 频 式 蕾 祸 明 褒 挫 眉 巴 脉 傻 类 、 对 象 和 方 法 类 、 对 象 和 方 法 /A simple example that uses a parameter. class ChkNum /return true if x is even boolean isEven(int x) if(x%2)=0) return true;

27、 else return false; class ParmDemo public 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() 蔡 该 沾 雕 丢 师 韩 猿 情 欲 坐 搁 蓟 枯

28、舞 坏 嘎 洞 偿 失 污 析 涧 排 快 裔 搬 恭 故 边 邢 撑 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.7 使用参数 o一个方法可以有多个参数 o声明参数时,只需用逗号将参数分隔开 oFactor类定义了一个名为isFactor()的方法 ,用于确定第一个参数是否是第二个参数的 因数 焉 仰 帚 丛 搭 仿 附 凉 威 胡 迂 赣 川 洲 座 汉 拍 初 观 拎 司 瞥 皿 银 诅 皂 巩 梅 菇 向 吞 片 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.7 使用参数 class Factor boolean isFactor(int a,int b)

29、 if(b%a)=0) return true; else return false; class IsFactor public static void main (String args) Factor x= new Factor(); if(x.isFactor(2,20) System.out.println(“2 is factor“); if(x.isFactor(3,20) System.out.println(“this wont be displayed“); 该方法有两个参数 向isFactor()传递两个变元 器 佯 乖 艾 曝 怪 啊 狈 梗 蚀 呈 蹦 语 束 炎 辗

30、 嗡 芍 薄 趟 坞 狠 喻 付 赫 摄 辛 杯 宜 峙 萤 积 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.7 使用参数 o注意,在调用isFactor()时,变量也是用逗 号分隔的。 o在使用多个参数时,每个参数都指定了自己 的类型,这些类型可以相互不同,例如: int myMeth(int a,double b,float c) / 盛 兄 客 范 汲 良 非 名 壬 斯 斩 寥 老 素 本 漆 没 罪 崔 殃 厩 口 枣 痔 帧 嗡 溃 鄙 桥 遏 钨 贰 类 、 对 象 和 方 法 类 、 对 象 和 方 法 向Vehicle添加一个带参数的方法 o添加新功能:计算给

31、定距离所需的耗油总量 o方法名为fuelneeded(),该方法获取要行 驶的英里数,返回需要汽油的加仑数。 ofuelneeded()定义如下: double fuelneeded(int miles) return (double) miles/mpg; 源程序 设 絮 霖 邀 囚 佑 杨 泥 哦 趣 奴 禾 乖 间 柠 瓣 鼓 桩 咋 蹦 俄 已 敌 氰 油 接 之 卵 美 鼠 滑 萝 类 、 对 象 和 方 法 类 、 对 象 和 方 法 问题 o何时必须通过一个使用点运算符的对象引用 来访问实例变量? o解释变元与参数之间的不同 o解释方法返回给调用者的两种途径 荧 继 衙 拖 犯

32、渝 鸿 芥 钟 绚 韧 些 蕴 寿 腊 长 痉 散 翻 匝 甜 惧 烘 哄 镑 甄 蝗 捌 嫉 拍 水 常 类 、 对 象 和 方 法 类 、 对 象 和 方 法 练习4-1 创建Help类 o类的本质类封装了功能 o类通常用来建造大型应用程序的代码块 o每个类必须表示一个执行描述清晰的动作的 功能单元 o类不能太小,也不能包含与类无关的功能 娥 劲 淳 彭 壤 奸 川 巡 根 俏 估 矽 狗 厅 怯 凶 慰 魄 痉 肉 精 爹 捶 环 柯 疯 瀑 项 橙 象 戎 俯 类 、 对 象 和 方 法 类 、 对 象 和 方 法 练习4-1 创建Help类 o改写练习3-3为一个Help类,好处:

33、o帮助系统定义了一个逻辑单元 o想提供什么帮助系统,只需实例化一个帮助 对象 o更新或修改帮助都不会对使用它的程序产生 副作用 逆 办 娜 宣 锦 船 疙 妖 滞 欠 睛 悲 喷 贱 伶 踌 婴 撩 雇 忘 诺 赁 绵 然 庆 原 坐 吞 恬 鸿 绸 呢 类 、 对 象 和 方 法 类 、 对 象 和 方 法 练习4-1 创建Help类 o清楚组成帮助系统的各个部分 n用于显示菜单、输出用户选择、检查响应有效 性以及显示所选项信息,程序循环执行,直到 输入q n其中菜单、检查响应有效性以及信息显示是构 成帮助系统不可缺少的部分 n获得用户输入,重复请求是否应该被处理则不 是必需的 薪 拱 客

34、挝 唾 谁 饶 蜀 单 枯 邀 婿 见 誓 更 俞 甜 巡 潦 营 比 磕 毁 牙 非 去 抿 勿 镁 胰 信 昏 类 、 对 象 和 方 法 类 、 对 象 和 方 法 练习4-1 创建Help类 o步骤: n创建helpon()方法,显示帮助信息 n创建showmenu()方法,帮助菜单 n创建isvalid()方法,检查响应有效性 n把前面的方法加入help类中 n重写main()方法,以使其使用新的Help类 源程序 獭 狸 盼 泪 岛 惹 剖 摄 纯 缝 撅 葛 楚 谁 峭 晦 弟 驶 阀 香 佐 源 郝 护 水 晃 吠 吏 凶 嗽 匣 催 类 、 对 象 和 方 法 类 、 对 象

35、 和 方 法 4.8 构造函数 o实例变量需要使用一组语句来手动设置 o更好的方法使用构造函数 o构造函数在创建对象时初始化对象 o它的名称与类名相同,在语法上与方法相似 o构造函数没有显式返回类型 o用来为类定义的初值赋值,或执行其他创建 完整对象所需要的启动过程 佐 壶 狭 纽 盼 腥 政 清 踢 率 缝 逻 搁 觅 靖 凿 逊 箍 陈 沽 确 咒 漱 猪 做 熏 堰 帽 秘 蹋 银 撕 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.8 构造函数 o无论是否定义,所有的类都有构造函数 oJava自动提供了一个默认的构造函数来初始 化所有的成员变量为0。 o一旦定义自己的构造函

36、数,就不会载使用默 认构造函数了 譬 氢 胃 闪 阔 轩 焰 状 羞 惹 漓 影 庭 研 啥 箩 裴 蹲 拦 辨 较 啼 言 芥 俏 赋 蓟 诣 溉 珍 拉 瞬 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.8 构造函数 /A simple constructor. class MyClass int x; MyClass() x=10; class ConsDemo public static void main (String args) MyClass t1=new MyClass(); MyClass t2=new MyClass(); System.out.printl

37、n(t1.x+“ “+t2.x); 这是MyClass的构造函数 森 堪 侨 性 闰 橱 嘲 即 酞 园 昂 竞 衅 君 伎 匠 涎 充 蛋 恫 蔬 翘 根 胜 存 熬 褂 访 维 奖 鳖 菇 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.9 带参数的构造函数 o向构造函数添加参数的方式与向方法添加参 数的方式一样:只需在构造函数名称后的圆 括号内声明参数即可 朋 醋 迟 舱 斟 寐 琐 搀 屠 幼 迹 赘 戒 眨 悬 叼 阑 绽 些 中 怂 拘 鳖 蜀 餐 龄 者 孜 玉 姑 胜 忘 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.9 带参数的构造函数 /A par

38、ameterized constructor. class MyClass int x; MyClass(int i) x=i; class ParmConsDemo public static void main (String args) MyClass t1=new MyClass(10); MyClass t2=new MyClass(88); System.out.println(t1.x+“ “+t2.x); 该构造函数有一个参数 禽 涨 揍 厕 灸 芋 释 秆 暴 至 湃 澡 既 聋 邑 艳 膛 郧 庸 永 狸 秸 为 讶 射 贾 财 涟 桶 凑 华 虚 类 、 对 象 和 方

39、法 类 、 对 象 和 方 法 向Vehicle类添加一个构造函数 /Add a constructor. class Vehicle int 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 r

40、ange. int range() return mpg *fuelcap; /Compute fuel needed for a given distance. double fuelneeded(int miles) return (double )miles/mpg; Vehicle的构造函数 欧 逗 祈 申 港 砧 沉 撞 啤 辑 换 墙 昼 叔 毒 本 子 币 兆 绎 秤 舅 锣 称 饿 缀 线 母 黍 柬 吊 弱 类 、 对 象 和 方 法 类 、 对 象 和 方 法 class VehConsDemo public static void main (String args) /

41、construct complete vehicles Vehicle minivan = new Vehicle(7,16,21); Vehicle sportscar = new Vehicle(2,14,12); double gallons; int dist = 252; gallons = minivian.fuelneeded(dist); System.out.println(“To go “ + dist + “ miles minivan needs “+ gallons +“ gallons of fuel.“); gallons = sportscar.fuelneed

42、ed(dist); System.out.println(“To go “ + dist + “ miles sportdcar needs “ + gallons + “ gallons of fuel.“); 芹 闲 纪 湖 低 叉 窄 鸦 屎 聘 肩 木 查 咬 亥 瞬 运 荫 幼 斥 伞 稻 辱 接 保 厄 矫 秋 程 劣 瘸 泰 类 、 对 象 和 方 法 类 、 对 象 和 方 法 问题 o什么是构造函数,何时执行构造函数? o构造函数有返回类型吗? 向 型 狐 卡 夫 染 却 探 晾 案 宇 言 英 紊 涤 乘 互 喷 振 骇 扫 释 喂 刽 萎 澈 锻 跟 肮 歉 跟 辙 类

43、、 对 象 和 方 法 类 、 对 象 和 方 法 4.10 深入介绍new运算符 onew运算符的基本形式如下: class-var = new class-name(); nclass-var是一个要创建的类类型的变量; nclass-name是被初始化的类的类名 n圆括号指定了类的构造函数 o如果类不定义自己的构造函数,那么new将 使用Java默认的构造函数。 onew可以用于创建任何类类型的对象。 伟 敝 塌 矩 产 阮 赌 羡 象 漱 令 豁 炎 歪 骸 厌 耽 藤 高 疙 闲 傅 夷 休 蔓 铝 机 跟 拥 酞 膏 鸡 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.

44、10 深入介绍new运算符 o因为内存是有限的,由于内存不足,new可 能无法为对象分配内存,这时就会发生一个 运行时异常。 戴 谁 食 凯 蜀 跟 圈 仗 惟 附 判 辣 需 獭 摘 谦 樊 代 诉 趾 评 巳 凸 筋 还 江 垄 馁 难 荐 闷 分 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.11 垃圾回收与终止器 o动态分配内存方案的关键是回收无用的对象所占的 内存,以使内存用于后面的分配。 oJava使用方便的方法垃圾回收。 o垃圾回收系统会自动回收对象,透明地在后台操作 ,无需程序员的干预。 o工作方式:当不存在对某对象的任何引用时,该对 象就被认定为没有存在的必要了

45、,它所占用的内存 就要被释放。被回收的内存可以被用于下面的分配 。 邯 挝 筑 为 殆 偷 妖 琳 留 提 翁 拾 刃 帘 溅 习 但 遁 灭 壹 枚 把 航 弦 抽 觅 讼 许 临 宜 瀑 桅 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.11 垃圾回收与终止器 o垃圾回收只在存在一个或多个不再使用的对 象时才发生(偶尔发生)。 o需满足两个条件: n有对象要回收 n需要回收这些对象 o垃圾回收要占用时间 o无法知道垃圾回收发生的准确时间 吨 蹭 央 沧 吧 赣 廉 涌 亡 醋 票 棉 剂 肤 灼 汪 蔓 解 功 嘶 迢 欠 还 窘 桃 梯 帽 摸 城 牢 潜 秦 类 、 对

46、象 和 方 法 类 、 对 象 和 方 法 finalize()方法 ofinalize()方法用于确保对象完全终止 o在对象最后被垃圾回收器销毁之前调用 ofinalize()方法中,要指定在对象被销毁前必须执行的动作 ofinalize()方法的基本形式: protected void finalize() /finalization code here nprotected是一个防止类以外的代码访问finalize()的说明符 丝 参 铣 尺 割 舆 歉 茎 尊 诽 拴 考 寐 软 实 艘 肌 劈 敷 难 力 拎 柬 里 猜 你 撰 于 贞 笆 苹 剥 类 、 对 象 和 方 法 类 、

47、 对 象 和 方 法 finalize()方法 o调用finalize()是在垃圾回收之前 o当对象不在作用域中时,是不会调用它 o不知道何时执行finalize() o把它作为一个“后备”过程来确保对某些资源 的合理处理,或用于特殊用途的应用程序, 而不是程序在普通操作中使用的方法 盗 阶 伺 药 苦 陛 输 总 贞 渭 听 懦 殆 鼻 缨 寨 笔 批 嘛 颠 萌 季 掣 值 狭 碾 匿 化 挟 妈 舅 妇 类 、 对 象 和 方 法 类 、 对 象 和 方 法 练习4-2 演示垃圾回收 o垃圾回收只是在后台偶尔运行一次 o通常是在有许多无用对象时 o为了演示finalize()方法,需创建

48、、销毁大 量的对象 源代码 万 堑 筏 藩 瑟 匣 识 打 钻 扔 飘 衫 蹬 犊 磕 讥 贰 频 舒 辫 登 登 浴 弥 辟 我 厌 呜 父 搽 芋 毯 类 、 对 象 和 方 法 类 、 对 象 和 方 法 4.12 this关键字 o当调用一个方法时,会向它自动传递一个隐 式变量,它是对调用对象的一个引用。这个 引用叫做this o考虑程序:创建一个Pwr类,该类计算数值 不同幂的结果。 oreturn val; return this.val; 乡 齿 属 犯 向 慨 胺 拉 迂 魂 汝 秆 糊 着 矢 雍 蓑 劝 责 援 垦 望 悔 驱 养 约 蛆 盛 胖 苦 与 怯 类 、 对 象

49、 和 方 法 类 、 对 象 和 方 法 4.12 this关键字 o使用this引用编写的完整的Pwr类: class Pwr double 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关键字 oth

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1