授课教师:牟勇
课时:100分钟
l 本章技能目标
n 会定义和使用类的方法
n 理解变量作用域
n 会创建包组织Java工程
n 会添加类方法的JavaDoc注释
n 会阅读JavaSE6文档
l 本章重点
n 理解变量作用域
n 会定义和使用类的方法
n 创建包组织Java工程
l 本章难点
n 使用类的方法
n 创建包组织Java工程
l 本章工作任务
以OO方式实现
n 计算并显示总成绩
n 计算并显示平均成绩
回顾上一章: [5分钟]
1.类和对象的区别是什么?
2.数据类型有哪两类?
3.实现输出学生信息,下面代码有哪些错误?
public class &Student {
String name;
char sex;
int age;
public String tostring(){
return name + "/t" + sex + "/t" + age;
}
public static void main(String[] args){
Student stu = new Student();
name = "神仙姐姐";
sex = 'F';
age = 18;
System.out.println(stu);
}
}
预习检查: [5分钟]
类的方法由哪几部分组成?
使用什么关键字定义包和导入包?
JavaDoc怎样写注释?
课程知识点讲解:
类的方法:[30分钟]
类的方法
提问:大家以前都玩过电动玩具吧?幻灯片1上面的图片就是一只电动狮子,我们用前一章所学习过的知识,来说一说,这只狮子有些什么属性和方法?
答案:直接出示电动狮子类:
/*
* AutoLion.java
* 电动玩具类
*/
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() + "的玩具狮子!";
}
}
在这个类中,我们定义了一个属性:颜色。另外还定义了四个方法,分别是:跑,叫,获得颜色还有显示狮子的特性(玩具的颜色)。什么叫方法呢?方法其实就是我们对某个事情怎么做的具体描述,它包括了方法名,方法体,还有返回值。
如何定义方法
提问:如何定义方法?
答案:我们来具体看看AutoLion类的跑方法和叫方法是怎么写的。
从中我们规定:run()和bark()就是我们方法的名字,而方法后面跟着的一对大括号,里面写的就是我们的方法体,它具体描述方法都做些什么事情。而写在方法名前面的一个单词,run()前面是void,而brak()前面是String,这两个单词就是在说明我们的方法将会产生的返回值。
由此,得出方法定义的语法为:
方法的命名
提问:我们知道为变量取名字是有限制的(让学员回忆变量命的规则),那方法的命名都有哪些规则呢?
答案:方法命的规则和变量命名的规则差不多:
Ø 必须以字母、‘_’或‘$’开头
Ø 可以包括数字,但不能以它开头
方法的返回值
提问:我们现在已经知道了如何定义一个方法,也知道了如何为方法取名,那我们应该如何写返回值呢?
答案:如果一个方法有返回值,我们直接写明它的返回值类型(如:String),同时,在方法体内必须也要有一个“return 变量”的语句与它对应。例如,如果返回值类型是String,那么,我们的return后面跟着的也必须是一个String的变量或String常量。
如果一个方法没有返回值,那么,我们写为void,并且在方法体中不写return语句,或只写一个return语句,后面不跟任何值。
小结:常见错误
请大家找出下面代码的错误(幻灯片10,11,可以上机编译,让学员看到编译错误信息):
错误提示:main()方法的返回值是void,而在方法体中,return后面却返回了一个String的常量。
错误提示:return语句后面只能返回一个值,而这里却返回了两个变量。
方法调用
提问:现在我们已经知道了写一个方法的规则,写任何东西都是要拿来用的,那我们如何使用我们写好的方法呢?
方法调用可以分为两种方式。一种是在类的内部调用方法,另一种是在另一个类B里调用类A的方法。如果在类的内部调用方法,只要很简单的写出方法名就可以了(记得方法后面都要加上小括号),如:
如果要在一个类的方法中调用另一个类的方法,就要麻烦一点。首先要实例化(new)另一个类,产生一个对象,然后再用对象名.方法()的形式进行调用。如:
小结:
情况 | 举例 |
1、类Student 的方法a()调用Student类的方法b(),直接调用 | public void a(){ b(); //调用b() } |
2、类Student的方法a()调用类Teacher的方法b(),先创建类对象,然后使用“.”调用 | public void a(){ Teacher t = new Teacher(); t.b(); //调用Teacher类的b() } |
编写成绩计算类(ScoreCalc)
Ø 属性:3门成绩(Java、C#、DB)
Ø 方法:计算平均成绩,显示平均成绩,计算总成绩,显示总成绩
Ø (源代码见ScoreCalc.java)
编写测试类
Ø (源代码见TestScoreCalc.java)
变量作用域:[15分钟]
变量作用域
过渡:修改AutoLoin类的代码,在showLion方法中加入一个错误的变量sound。
提问:前面我们做的那个玩具狮子类不太完善,我个人觉得,除了显示颜色以外,还应该显示一下它的叫声。我们怎么做呢?
答案:修改后的代码如下:
大家会看到,如果我这样修改,编译器会报错了:找不到对象sound,这是怎么回事呢?
告诉学员:在我们的现实生活中,很多事物是有所有者的,比如,我有一个手机,你也有一个手机。如果我要用你的手机,一定要事先征得你的同意。当然也有一些事物是公共的,比如路灯,如果我要使用路灯,不需要征得谁的同意,大家都可以用(当然,不能把路灯搬回自己家)。我们把对物品的使用范围称为作用域,例如路灯的作用域就是马路旁边,我的手机的作用域,就是我自己,你的手机的作用域就是你自己,同样,在Java编程中也模仿这种情况,它的作用域区分是通过大括号来标明,变量声明在哪个大括号里,就只在哪个大括号里起作用。
总结:我们把写在类的大括号里的变量称为成员变量,而把其余的变量统称为局部变量。在上例中的color就是成员变量。由于类的大括号括住了类里的所有代码,所以color可以在类的任何位置使用。而上例中的sound变量,却是声明在bark()方法的大括号里的,所以sound变量的作用域仅在bark()方法中,即只能在bark()方法中使用,其它的地方就不能引用它了。
我们知道,除了类和方法都会打大括号,if和循环语句也会打大括号,那我们在for循环里声明一个变量之后,它的作用域是个什么情况呢?我们再看一个例子:
大家会看到,编译器报错了。在System.out.println()这里是找不到a这个变量的,同样i也是找不到的。原因和前面说的是一样的,因为i和a均声明在for循环内部,所以,出了for循环,这两个变量就无效了,所以编译器会说找不到对象。
小结:让学生写出三个类,重点在方法的调用及变量作用域
编写电池类(Cell):自动续电
Ø 属性:品牌
Ø 方法:续电
编写手机类(Phone):它可以下载音乐,可以播放这些音乐,可以进行充电
Ø 属性:无
Ø 方法:下载音乐,播放音乐,充电
编写测试类(TestPhone)
Ø 源代码见Phone.java,Cell.java,TestPhone.java
面向对象的编程思维:[30分钟]
为什么要这样写代码
以前我们也写过平均分计算的代码,我们来回忆一下:
提问:既然我们可以这样写,为什么还要改成类的形式呢?
答案:这样写是可以的,但如果我们有2000个地方都需要用到这样一段代码,难道我们复制粘贴2000次?好,就算你完成了2000次的复制粘贴,这时候,老板通知你:我们不算3科成绩了,要算5科成绩了,我相信你连跳楼的心都有了。
那怎么办呢?面向对象思想告诉我们,有办法!
就是把这样的一段代码写在一个方法里,其它的地方都使用方法调用,不用重复写代码,如果代码要改,只要改动方法就可以了,方法调用的地方都不用修改,怎么样?是不是很爽?
为什么需要包:
提问:现在我们学会了很厉害的一招,使用方法和方法调用来减少我们的编码量,所以,以后的工作就是写类写方法了,假设你工作了一年,结果就是:你有了一大堆类。如果对这些类不进行管理,那我们要找其中一个类会是非常困难的,那怎么管理呢?
答案:生活中,我们是通过文件对我们的文件进行分门别类的存放的,这样我们要找什么东西都会很快,计算机操作系统也是通过文件夹系统来管理各种文件。在不同的文件夹中,文件的名字可以重名,这样就减轻了我们想名字的痛苦,而Java也采用了相似的办法,在Java使用包对Java的类文件进行管理。
包是什么:
包非常类似于文件夹,Java使用包来组织Java程序。
如何创建和导入包
使用关键字package创建包,即定义了该类文件的位置。使用关键字import来导入包,目的是使用处在其他包中的类。
注意:package应该是Java程序里的第一行代码。
演示在Eclipse中如何创建包。
小结2:幻灯片29
JavaDoc注释:[5分钟]
JavaDoc注释:
回顾原来学过的注释:
单行注释://这里是注释
多行注释:/*这里是注释1
这里是注释2*/
JavaDoc注释:使用“/**”开始和“*/”结束,用来注释类,方法等
类的注释:
方法的注释:
演示如何把JavaDoc变为帮助文档
本章总结 [10分钟]
考核点
定义类的方法的步骤是什么?
类中的一个方法如何调用类的另一个方法?
类中的一个方法如何调用另一个类的方法?
如何声明包?如何导入包?
包与存储Java源文件的目录结构的关系是什么?
如何给类的方法添加JavaDoc注释?
扩展部分:
暂无
学员问题汇总:
暂无
作业:
习题1:174页至176页选择题
习题2:176页第1,3题
习题3:预习第八章,试做课后的选择题