




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章类的无参方法 本章工作任务 实现计数器程序 实现计算平均分和课程总成绩 实现MyShopping系统入口程序 实现MyShopping系统菜单类 实现MyShopping系统菜单切换 本章技能目标 会定义和使用类的方法 理解诶变量作用域 会添加类方法的JavaDoc注释本章单词请在预习时学会下列单词的含义和发音,并填写在横线处。1. document:_2. display:_3. method:_4. version:_5. orient:_6. parameter:_7. since:_本章简介在上一章的学习中,我们一起进入了面向对象的编程世界,对它的一些基本概念类,对象有了一定的了解,并且能使用Java语言定义类,类的属性和方法。从本章开始,将对类的方法进行深入学习。如何利用好方法实现一个独立的功能,在今后的编程生活中将产生极大打影响。理解了方法的意义,你还需要了解变量的作用域这个概念,为深入学习带参方法打下坚实的基础。11.1 类的方法概述11.1.1 什么是类的方法类是由一组具有相同属性和共同行为的实体抽象而来的,对象执行的操作时通过编写类的方法实现的。显而易见,类的方法是一个功能模块,其作用是“做一件事情”。例如,在童年时代,你可能玩过电动玩具,图11.1是一只“电动玩具狮子”,在它身上有两个按钮,如果按动按钮,电动狮子就会跑或叫。图11.1 电动玩具狮子下面就创建一个电动狮子(AutoLion)类,它的属性和行为如示例1所示。示例1public class AutoLion String color = “黄色”; /跑方法 public void run() System.out.println(“正在以0.1米/秒的速度向前奔跑”); /叫方法 public String bark() String sound = “大声吼叫”; return sound; 在示例1中,AutoLion类定义了两个行为(方法):“跑”和“叫”。在玩电动玩具时,我们只要按动“奔跑”按钮,电动狮子就能跑,但是你是否思考过它为什么能跑?其实,它为什么能跑是生产电动狮子的厂商思考的问题,我们不需要知道电动玩具的内部构造,只要按动这个按钮就可以了。电动玩具能跑能叫的内部实现就相当于类中的方法,这样的优点正是类提供给我们的。每一个类的方法都定义了一个功能。例如,上一章我们编写的showCenter()方法,它的作用就是输出中心的信息,创建类的对象之后,我们可以直接调用这个方法,而不再去考虑这个方法是如何实现的。同样,对于示例1定义的run()方法和bark()方法,我们也可以直接调用。可见,类的方法定义了类的某种行为(功能),而且方法的具体实现封装在类中,实现了信息隐藏。11.1.2 如何定义类的方法类的方法必须包括以下三个部分 方法的名称。 方法的返回值类型。 方法的主体。语法public返回值类型 方法名() /方法的主体通常,编写方法时,分两步完成。第一步:定义方法名和返回值。第二步:在中编写方法的主体部分。在编写方法时,要注意以下三点。 方法体放在一对大括号中,方法体就是一段程序代码,完成一定的工作。 方法名主要在调用这个方法时使用,在Java中一般采用骆驼式命名法。 方法执行后可能会返回一个结果,该结果的类型称为返回值类型,使用return语句返回值。语法return 表达式;比如在bark()方法中,返回类型是String类型,因此在方法体重必须使用return返回一个字符串。如果方法没有返回值,则返回值类型为void,比如run()方法没有返回值,所以返回值类型为void。因此,在编写程序时一定要注意方法声明中返回值的类型和方法体中真正返回值的类型是否匹配,如果不匹配,编译器就会报错。其实这里的return语句是跳转语句的一种,它主要做两件事情。 跳出方法。意思是“我已经完成了,要离开这个方法”。 给出结果。如果方法产生一个值,这个值放在return后面,即部分,意思是“离开方法,并将的值返回给调用它的程序”。就像我们按动按钮,电动狮子就会跑,这个“跑”就是方法返回给我们的一个错误。11.1.3 方法调用定义了方法就是要拿来使用的,比如上一章我们定义了showCenter()方法,用来输出相关信息。简单地说,在程序中通过使用方法名称从而执行方法中包含的语句,这一过程就成为方法调用,方法调用的一般形式如下:语法对象名。方法名();Java中类是程序的基本单元,每个对象需要完成特定的应用程序功能。当需要某一对象执行一项特定操作时,通过调用该对象的方法来实现。另外,在类中,类的不同成员方法之间也可以进行相互调用。接下来,我们就来实现下面的问题。 问题 小明过生日,爸爸送给他一个电动狮子玩具,编写程序测试这个狮子能否正常工作(能跑、会叫、显示颜色)。 分析 现在要模拟玩电动狮子的过程。按动控制狮子叫的按钮,它就会发出叫声,按动狮子跑的按钮,狮子就会奔跑。因此,根据要求,需要定义两个类:电动狮子类(AutoLion)和测试类(TestLion)。其中,TestLion类中定义程序入口(main方法),检测跑和叫的功能是否可以正常运行。示例2电动狮子类:public class AutoLion String color = “黄色”; /颜色/*跑*/public void run () System.out.println(“正在以0.1米/秒的速度向前奔跑”); /*叫*/ public String bark() String sound = “大声吼叫”; return sound; /*获得颜色*/public String getColor() return color;/*显示狮子特性*/public String showLion() return”这是一个”+getColor()+”的玩具狮子!”;测试类:public class TestLion public static void main(String args) AutoLion lion = new AutoLion(); /创建AutoLion对象 System.out.println(lion.showLion(); /调用方法显示类信息 lion.run(); /调用跑方法 System.out.println(lion.bark(); /调用叫方法运行结果如图11.2所示。图11.2 示例2的运行结果在示例2中我们看到,类中的成员方法相对独立地完成了某个应用程序功能,它们之间可以相互调用,调用时仅仅使用成员方法的名称。例如本示例中,方法getColor()的功能是获得电动狮子的颜色,在showLion()方法中可以直接调用。return”这是一个”+getColor+”的玩具狮子!”;showLion()是类的方法成员,因此它可以直接调用这个类的另一个方法成员getColor(),调用时直接引用方法的名称getColor()就可以了。但是,其他类的方法要调用AutoLion类的成员方法时,就必须首先创建这个类的一个对象,然后才能通过点运算符使用它的成员方法。AutoLion lion = new AutoLion(); /创建AutoLion对象lion.run(); /调用跑步方法总之,凡涉及类的方法的调用,均使用如下两种形式。 同一个类中的方法,直接使用方法名调用该方法。 不同类的方法,首先创建对象,再使用“对象名.方法名”来调用。11.1.4 常见错误在编写方法以及调用方法时,一定要细心,比秒出现以下错误。常见错误1public class Student public void showInfo() return “我是一名学生”;常见错误2public class Student public double getInfo() double weight = 95.5; double height = 1.69; return weight,height;原因分析:方法不能返回多个值。常见错误3public class Student public String showInfo() return “我是一名学生“; public double getInfo() double weiget = 95.5; double height = 1.69; return weight,height; 原因分析;多个方法不能相互嵌套定义。例如,不能将方法getInfo()定义在方法showlnfo()中。常见错误4public class Student int age = 20;if(age20) System.out.println(“年龄不符合入学要求!”);public void showInfo() return”我是一名学生”;原因分析,不能再方法外部直接写程序逻辑代码。11.1.5 上机练习上机练习1指导计算平均分和总成绩训练要点 方法的定义 方法的调用需求说明从键盘接受三门课的分数,计算三门课的平均分和总成绩,编写成绩计算类实现该功能。运行结果如图11.3所示图11.3上机练习1的运行结果实现思路及关键代码(1) 创建类ScoreCalc(2) 分别编写方法,实现以下功能。 计算平均成绩 显示平均成绩 计算总成绩 显示总成绩(3) 编写测试类TestScoreCalc,进行验证。参考解决方案public class ScoreCalcint java;/Java成绩int c;/c#成绩int db;/DB成绩/计算总成绩public int calcTotalScore() int total = java + c + db; return total;/显示总成绩public void showTotalScore() System.out.println(“总成绩是:“+ calcTotalScore();/计算平均成绩public int calcAvg() int avg = (java + c + db) /3; return avg;/显示平均成绩public void showAvg() System.out.println(“平均成绩是:“+ calcAvg();11.2变量的作用域在现实生活中,我们经常会碰到这样一种情况:身边一些资源我们无权使用。 互联网上的一些宝贵的资料我们无权下载因为我们不是会员。 某公司的研发中心我们不能自由出入因为我们不是该公司的研发人员。 高级俱乐部的豪华高尔夫球场我们不能去玩因为我们没有vip卡。可见,一些资源仅仅能被授权的人使用。如果不在授权范围内,很遗憾,你就无权享用了。在Java中,我们也会遇到同样的情况。11.2.1 成员变量和局部变量Java中以类来组织程序。类中可以定义变量和方法。在类的方法中,我们同样也可以定义变量。在不同的位置定义的变量有什么不同吗?由图11.4所示,在类中定义的变量称为类的成员变量,例如变量1、变量2和变量3.在方法中定义的变量称为局部变量,例如变量4和变量5.在使用时,成员变量和方法的局部变量具有不同的使用权限。对于图中AutoLion类中所定义的变量说明如下。 成员变量:AutoLion类的方法可以直接使用该类定义的成员变量。如果别的类的方法要访问它,必须首先创建该类的对象,然后才能通过点运算符来引用。 局部变量:它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中能够使用它。图11.4 变量作用域总地来说,使用成员变量和局部变量时需要注意以下几点内容。 作用域不同。局部变量的作用仅限于定义它的方法,在该方法外无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用成员变量。 初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它一个默认值,基本数据类型的值为0,引用类型的值为null。但是Java不会给局部变量赋予初始值,因此局部变量必须要定义赋值后再使用。 在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。 局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。11.2.2 常见错误在编程过程中,因为使用了无权使用的变量而造成编译错误时非常常见的,阅读下面几段代码,引以为戒!1. 误用局部变量常见错误5public class Test int score1 = 88;int score2 = 98;public void calcAvg() int avg = (score1 + score2)/2;public void showAvg() System.out.println(“平均分是:”+avg);如果你编写一个main()方法来调用Student类的showAvg()方法,你会发现编译器会报错“无法解析avg“。为什么呢?因为你在方法showAvg()中使用了在方法calcAvg()中定义的变量avg,这就超出了avg的作用域了。排错方法:如果要使用在方法calcAvg()中获得的avg结果,可以编写带有返回值的方法,然后从方法showAvg()中调用这个方法,而不是直接使用在这个方法中定义的变量。2. 控制流语句块中的局部变量常见错误6public class VariableDomainl public static void main(String args) for(int i = 0, a = 0; i 4; i+) a+; System.out.pringtln(a); 编译运行代码,编译器又报错“无法解析a”。这次又是什么问题呢?仔细看一下你会发现,变量a是在for循环块中定义的变量,因此a只能在for循环中使用,一旦退出循环,就不能再使用a了。另外,在while循环,do-while循环、if选择结构、switch选择结构中定义的变量,作用域也仅仅在这些控制流语句块内。注意:这是程序初学者非常容易犯的错误,大家一定要提高警惕!11.3 面向对象的编程思维学习了类的概念以及类的成员方法,那么,Java这种面向对象的编程方法到底带给了我们什么呢?11.3.1 如何使用面向对象思维面向对象编程(Object Oriented Programming,OOP)是一种计算机编程结构,是上世纪九十年代才流行起来的一种软件编程思想。OOP的一条基本原则就是计算机是由单个能够起到子程序作用的单元或对象组合而成的,采用这种架构编程主要起到重用性、灵活性和扩展性的强大作用。下面我们就来对比体会一下OOP。在没学习本章前,我们已经能够在main()方法中实现计算学生总成绩、计算平均分、显示平均分以及显示总成绩等功能,如示例3。示例3import java.util.Scanner;public class OldScoreCalc public static void main(String args) /*接收成绩*/ Scanner input = new Scanner(System.in); System.out.print(“请输入Java成绩:”); int java = input.nextInt(); System.out.print(“请输入c#成绩:”); int c = input. nextInt(); System.out.print(“请输入DB成绩:”); int c = input. nextInt(); /*计算并显示输出*/ 不可重用的代码 int total = java + c + db; double avg = total / 3; System.out.print(“总成绩:“ + total); System.out.print(“n 平均分:“ + avg);看到这里,你可能会问,比起TestScoreCalc类,似乎代码也没怎么多啊?“但是,如果有100个类都要实现这个功能,示例3中的代码完全不能够重用,这个工作量可想而知。但是如果使用今天我们学习的面向对象的方法来实现,将独立的功能模块使用方法来实现,100个类都来调用就行了,完全不用重写,如图11.5所示。这就是面向对象的编程思想给我们带来的好处:类的方法可以实现某个特定的功能,别的类不需要知道它是如何实现的!知道实现此功能的类和它的方法名,就可以直接调用了,不用重复编码!图11.5 使用面向对象思维解决问题11.3.2 上机练习上机练习2练习定义管理员类需求说明编写管理员类Manager,使用show()方法返回管理员信息。运行结果如图11.6所示。图11.6 练习2的运行结果 提示 show()方法使用return语句实现信息的返回。上机练习3指导实现菜单的级联效果训练要求 方法的定义。 方法的调用。 循环结构。需求说明实现MyShopping菜单,输入菜单项编号,可以自由切换各个菜单。菜单的级联关系如图11.7所示,运行效果如图11.8所示。图11.7 上机练习3的菜单级联关系图11.8 上机练习3的运行效果实现思路及关键代码(1) 创建菜单类Menu。(2) 分别编写方法,实现以下功能。 showLoginMenu()方法,实现显示登录菜单。 showMainMenu()方法,实现显示主菜单。 showCustMenu()方法,实现显示客户信息管理菜单。 showSendGMenu()方法,实现显示真情回馈菜单。(3) 编写测试类TestMenu,进行验证。参考解决方案(1) 登录菜单showLoginMenu()方法参考如下代码。public void showLoginMenu() System.out.println(“nt 欢迎使用我行我素购物管理系统n”);System.out.println(“tt 1.登 录 系 统 n”);System.out.println(“tt 2.退 出 n”);System.out.println(“* * * * * * * * * * * * * * * * * * *”);System.out.print(“请选择,输入数字:”);(2) 主菜单showMainMenu()方法中关键代码如下。public void showLoginMenu() /Boolean con;do con = false; /*输入数字,选择菜单*/ Scanner input = new Scanner(System.in); int no = input.nextInt(); if (no = 1) showCustMMenu(); else if (no = 2) showCustMMenu(); else if (no = 0) showCustMMenu(); else System.out.print(“输入错误,请重新输入数字:”); con = true; while(con);(3) 真情回馈showSendGMenu()方法中关键代码如下。public void showSendGMenu() /Boolean con;do con = false; /*输入数字,选择菜单*/ Scanner input = new Scanner(System.in); int no = input.nextInt(); if (no = 1) System.out.println(“执行幸运大放送”); else if (no = 2) System.out.println(“执行幸运抽奖”); else if (no = 3) System.out.println(“执行生日问候”); else if (no = 0) showCustMMenu(); /返回主菜单 else System.out.print(“输入错误,请重新输入数字:”); con = true; while(con);(4) 测试类TestMenu中关键代码如下。Boolean con = true;do/*显示登录菜单*/Menul menu = new Menul();menu.showLoginMenu();/*实现菜单*/Scanner input = new Scanner(System.in);int choice = input.nextInt();switch(choice) case 1: menu.showMainMenu(); break; case 2: System.out.println(“谢谢您的使用!”); con=false; break;while(con);上机练习4练习实现系统入口程序需求说明编写类StartSMS,实现输入用户名和密码,符合条件的进入系统。运行结果如图11.9所示。图11.9 上机练习4的运行结果 提示 在类TestMenu的基础上,实例化Manager对象,在switch结构中增加相应的代码。11.4 JavaDoc注释程序是程序员的创作作品。它应该具有可读性,相对持久性和可维护性,因为你不希望自己以前的作品在之后的阅读中给自己留下障碍。当然,更重要的是自己的程序能让其他程序员读懂并且修改。在许多大型软件公司,编程人员编写的注释量甚至超过代码量。因此,一定要从一开始就养成写注释的习惯,这样才能在以后的工作中更好地适应!11.4.1 什么是JavaDoc注释在前面章节中,我们已经学习了两种写注释的方法:单行注释(以”/”开头)和多行注释(以”/*”开头,以”*/”结尾)。例如:/这是一个注释/*这是一个演示程序*/在Java中,还有一类注释,称为JavaDoc注释,例如:/* *AccpSchool类 *author JadeBird *version 1.0 2007/06/21 */什么是JavaDoc呢?JavaDoc是Sun公司提供的一种技术,它能够从程序源代码中抽取类、方法、成员等的注释,形成一个和源代码配套的APL帮助文档(简单地说,就是介绍该类、类的方法和成员变量的文档)。因此,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过JavaDoc技术就可以同时生成程序的开发文档了。这正是它的诱人之处!编写之前,首先看一下JavaDoc注释的语法规则。 JavaDoc注释以”/*”开头,以”*/”结尾。 每个注释包含一些描述性的文本及若干个Javadoc 标签。 Javadoc标签一般以”为前缀,常用的JavaDoc标签见表11-1。表11-1 常用的JavaDoc标签标签 含义 标签 含义author 作者名 version 版本标识parameter 参数及其意义 since 最早使用该方法/类/接口的JDK版return 返回值 throws 异常类及抛出条件下面就来为上机练习1的ScoreCalc类添加JavaDoc注释吧!如示例4所示。示例4/* ScoreCalc类* author chris* version 2.0 2010/06/01*/public class ScoreCalc /*Java成绩*/int java;/*Java c#成绩*/int c;/*DB 成绩*/int db;/* 计算总成绩* return total*/public int calcTotalScore() int total = java + c + db;return total;/* 显示总成绩*/public void showTotalScore() System.out.println(“总成绩是:” + calcTotalScore();/* 计算平均成绩* return avg*/public int calcAvg() int avg = (java + c + db) / 3;return avg;/* 显示平均成绩*/public void showAvg() System.out.println(“平均成绩是:” + calcAvg(); 小技巧 在Eclipse中,输入”/*”,然后按Enter键,Eclipse平台会自动显示JavaDoc注释格式,并且字体颜色显示蓝色。另外,当使用JavaDoc标签时,输入,Eclipse平台会自动显示一个下拉列表,它提供了所有的JavaDoc注释标签供选择。11.4.2 如何生成JavaDoc文档添加完JavaDoc注释后,接下来就是生成相应的开发文档了。生成JavaDoc开发文档的方法主要有两种。 使用命令行方式生成。 使用Eclipse工具生成。使用Eclipse生成JavaDoc文档的操作方法很简单,在“文件”菜单下选择“导出”,弹出“导出”对话框,选择“Java”下的JavaDoc提交即可。使用命令行的方式原理基本一致,这里不再赘述,可自行查阅相关资料。11.4.3 上机练习上机练习5练习添加并生成JavaDoc文档需求说明为我行我素购物系统的Manager类、Menu类添加JavaDoc注释,并使用Eclipse工具,生成JavaDoc文档。本章总结下面我们队这一章的内容做一个回顾和总结。 定义类的方法必须包括以下三个部分。 方法的名称。 方法返回值的类型。 方法的主体。 类的方法调用,使用如下两种形式。 同一个类中的方法,直接使用方法名调用该方法。 不同类的方法,首先创建对象,再使用“对象名.方法名”来调用。 在Java中,有成员变量和局部变量,它们的作用域各不相同。 JavaDoc注释以”/*”开头,以”*/”结尾,并且提供了JavaDoc注释标签,使用JavaDoc技术可以生成开发文档。本章作业一、 选择题1.下列代码中正确的是( )。(选两项)Apublic String foo() return “我爱中国”;Bpublic void foo() return “我爱中国”;Cpublic String foo() String s = “我爱中国”;return s;Dpublic int foo() String s = “我爱中国”;return s;2.给定的Java代码如下所示,则编译运行后,输出结果为( )。public class testint I;public int aMethod() i+;return I;public static voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 6523-2:2025 EN Information technology - Structure for the identification of organizations and organization parts - Part 2: Registration of organization identificatio
- 课件模板老师说课
- 旅行的蜗牛课件
- 拖鞋创意画课件
- 技能培训助理面试
- 电影《找到你》解析课件
- 中班课堂游戏课件
- 历年化学考试题及答案
- 广东关于自考试题及答案
- 老年自考试题及答案
- 私人二手摩托车转让合同范本
- 企业形象策划服务合同范本
- 2025年家庭照护者、健康照护师岗位专业技能资格知识考试题(附答案)
- 餐饮用餐协议书范本7篇
- 《中国变应性鼻炎诊断和治疗指南(2022年修订版)》解读
- 《矿山隐蔽致灾因素普查规范》解读培训
- 2024年度人防工程维护保养合同6篇
- 药品研发过程中的管理制度
- 2024德国欧洲氧化亚氮减排经验手册
- 高考作文素材积累与写法总结27 自知与知人作文审题指导及素材积累
- 2024-2030年中国电解二氧化锰(EMD)行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论