教案:Java第7章 类的方法

来源:互联网 发布:淘宝小图标logo高清 编辑:程序博客网 时间:2024/04/30 06:13

授课教师:牟勇

课时: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类的跑方法和叫方法是怎么写的。

文本框: public class AutoLion {String color = "黄色";public void run(){System.out.println("正在以0.1米/秒的速度向前奔跑");}public String bark(){String sound = "吼" ;return sound;}}

从中我们规定:run()bark()就是我们方法的名字,而方法后面跟着的一对大括号,里面写的就是我们的方法体,它具体描述方法都做些什么事情。而写在方法名前面的一个单词,run()前面是void,而brak()前面是String,这两个单词就是在说明我们的方法将会产生的返回值。

由此,得出方法定义的语法为:

文本框: public   返回值类型  方法名()  {//这里编写方法的主体}

方法的命名

提问:我们知道为变量取名字是有限制的(让学员回忆变量命的规则),那方法的命名都有哪些规则呢?

答案:方法命的规则和变量命名的规则差不多:

Ø  必须以字母、‘_’或‘$’开头

Ø  可以包括数字,但不能以它开头

方法的返回值

提问:我们现在已经知道了如何定义一个方法,也知道了如何为方法取名,那我们应该如何写返回值呢?

答案:如果一个方法有返回值,我们直接写明它的返回值类型(如:String),同时,在方法体内必须也要有一个“return 变量”的语句与它对应。例如,如果返回值类型是String,那么,我们的return后面跟着的也必须是一个String的变量或String常量。

文本框: public class Student{String name = "张三";public String getName(){return name;}public String sayHello(){return “你好!!!”;}}

如果一个方法没有返回值,那么,我们写为void,并且在方法体中不写return语句,或只写一个return语句,后面不跟任何值。

文本框: public class Student{String name = "张三";public void displayName(){System.out.println(name);}public void sayHello(){System.out.println(“你好!!!”);return ;}}

 

小结:常见错误

请大家找出下面代码的错误(幻灯片10,11,可以上机编译,让学员看到编译错误信息)

文本框: public class AccpSchool{……public static void main(String[ ] args){……return "ACCP北京中心! ";}}

错误提示:main()方法的返回值是void,而在方法体中,return后面却返回了一个String的常量。

文本框: public class Student{public double getInfo(){double weight = 95.5;double height = 1.69;return weight, height;}}

错误提示:return语句后面只能返回一个值,而这里却返回了两个变量。

方法调用

提问:现在我们已经知道了写一个方法的规则,写任何东西都是要拿来用的,那我们如何使用我们写好的方法呢?

方法调用可以分为两种方式。一种是在类的内部调用方法,另一种是在另一个类B里调用类A的方法。如果在类的内部调用方法,只要很简单的写出方法名就可以了(记得方法后面都要加上小括号),如:

文本框: public class AutoLion {String color = "黄色";public String getColor(){   //方法1:获得颜色属性return color;}public String showLion() {    //方法2:描述狮子特性//调用getColor()方法,获得狮子的颜色,注意调用的格式return "这是一个" + getColor() + "的玩具狮子!" ;}}

如果要在一个类的方法中调用另一个类的方法,就要麻烦一点。首先要实例化(new)另一个类,产生一个对象,然后再用对象名.方法()的形式进行调用。如:

文本框: //这是一个新类,它要调用我们的玩具狮子类public class TestLion {public static void main(String[ ] args) {//第一步,先实例化(new)一个对象AutoLion lion = new AutoLion();//第二步,对象名.方法名()调用System.out.println(lion.showLion());//第二步,对象名.方法名()调用lion.run();//第二步,对象名.方法名()调用System.out.println(lion.bark());}}

小结:

情况

举例

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门成绩(JavaC#DB

Ø  方法:计算平均成绩,显示平均成绩,计算总成绩,显示总成绩

Ø  (源代码见ScoreCalc.java)

编写测试类

Ø  (源代码见TestScoreCalc.java)

变量作用域:[15分钟]

变量作用域

过渡:修改AutoLoin类的代码,在showLion方法中加入一个错误的变量sound

提问:前面我们做的那个玩具狮子类不太完善,我个人觉得,除了显示颜色以外,还应该显示一下它的叫声。我们怎么做呢?

答案:修改后的代码如下:

 文本框: public class AutoLion {String color = "黄色";public void run(){       //方法1:跑System.out.println("正在以0.1米/秒的速度向前奔跑。");}public String bark(){   //方法2:叫String sound = "吼" ;return sound;}public String getColor(){   //方法3:获得颜色属性return color  ;}public String showLion() {    //方法4:输出类的描述信息return "这是一个" + getColor() + "的玩具狮子!叫声是" + sound  ;}}

大家会看到,如果我这样修改,编译器会报错了:找不到对象sound,这是怎么回事呢?

告诉学员:在我们的现实生活中,很多事物是有所有者的,比如,我有一个手机,你也有一个手机。如果我要用你的手机,一定要事先征得你的同意。当然也有一些事物是公共的,比如路灯,如果我要使用路灯,不需要征得谁的同意,大家都可以用(当然,不能把路灯搬回自己家)。我们把对物品的使用范围称为作用域,例如路灯的作用域就是马路旁边,我的手机的作用域,就是我自己,你的手机的作用域就是你自己,同样,在Java编程中也模仿这种情况,它的作用域区分是通过大括号来标明,变量声明在哪个大括号里,就只在哪个大括号里起作用。

总结:我们把写在类的大括号里的变量称为成员变量,而把其余的变量统称为局部变量。在上例中的color就是成员变量。由于类的大括号括住了类里的所有代码,所以color可以在类的任何位置使用。而上例中的sound变量,却是声明在bark()方法的大括号里的,所以sound变量的作用域仅在bark()方法中,即只能在bark()方法中使用,其它的地方就不能引用它了。

我们知道,除了类和方法都会打大括号,if和循环语句也会打大括号,那我们在for循环里声明一个变量之后,它的作用域是个什么情况呢?我们再看一个例子:

文本框: …for(int i = 0, a = 0; i < 4; i++){a++;}System.out.println(a);…

大家会看到,编译器报错了。在System.out.println()这里是找不到a这个变量的,同样i也是找不到的。原因和前面说的是一样的,因为ia均声明在for循环内部,所以,出了for循环,这两个变量就无效了,所以编译器会说找不到对象。

小结:让学生写出三个类,重点在方法的调用及变量作用域

编写电池类(Cell):自动续电

Ø  属性:品牌

Ø  方法:续电

编写手机类(Phone):它可以下载音乐,可以播放这些音乐,可以进行充电

Ø  属性:无

Ø  方法:下载音乐,播放音乐,充电

编写测试类(TestPhone

Ø  源代码见Phone.javaCell.javaTestPhone.java

 

面向对象的编程思维:[30分钟]

为什么要这样写代码

以前我们也写过平均分计算的代码,我们来回忆一下:

文本框: public static void main(String[ ] args) {Scanner input = new Scanner(System.in);System.out.print("请输入Java成绩:");int java = input.nextInt();……/*计算并显示输出*/int total = java + c + db;double avg = total / 3;System.out.print("总成绩:" + total);System.out.print("/n平均分: " + avg);}

提问:既然我们可以这样写,为什么还要改成类的形式呢?

答案:这样写是可以的,但如果我们有2000个地方都需要用到这样一段代码,难道我们复制粘贴2000次?好,就算你完成了2000次的复制粘贴,这时候,老板通知你:我们不算3科成绩了,要算5科成绩了,我相信你连跳楼的心都有了。

那怎么办呢?面向对象思想告诉我们,有办法!

就是把这样的一段代码写在一个方法里,其它的地方都使用方法调用,不用重复写代码,如果代码要改,只要改动方法就可以了,方法调用的地方都不用修改,怎么样?是不是很爽?

为什么需要包:

提问:现在我们学会了很厉害的一招,使用方法和方法调用来减少我们的编码量,所以,以后的工作就是写类写方法了,假设你工作了一年,结果就是:你有了一大堆类。如果对这些类不进行管理,那我们要找其中一个类会是非常困难的,那怎么管理呢?

答案:生活中,我们是通过文件对我们的文件进行分门别类的存放的,这样我们要找什么东西都会很快,计算机操作系统也是通过文件夹系统来管理各种文件。在不同的文件夹中,文件的名字可以重名,这样就减轻了我们想名字的痛苦,而Java也采用了相似的办法,在Java使用包对Java的类文件进行管理。

包是什么:

包非常类似于文件夹,Java使用包来组织Java程序。

如何创建和导入包

使用关键字package创建包,即定义了该类文件的位置。使用关键字import来导入包,目的是使用处在其他包中的类。

注意:package应该是Java程序里的第一行代码。

演示在Eclipse中如何创建包。

小结2:幻灯片29

 

JavaDoc注释:[5分钟]

JavaDoc注释:

回顾原来学过的注释:

单行注释://这里是注释

多行注释:/*这里是注释1

          这里是注释2*/

JavaDoc注释:使用“/**”开始和“*/”结束,用来注释类,方法等

类的注释:

文本框: /***CalcScore类*@author   Chris*@version  1.0  2007/06/21*/

方法的注释:

文本框:      /*** 计算总成绩* @return total 总分*/

演示如何把JavaDoc变为帮助文档

本章总结   [10分钟]

考核点

定义类的方法的步骤是什么?

类中的一个方法如何调用类的另一个方法?

类中的一个方法如何调用另一个类的方法?

如何声明包?如何导入包?

包与存储Java源文件的目录结构的关系是什么?

如何给类的方法添加JavaDoc注释?

扩展部分:

* 暂无

学员问题汇总:

* 暂无

作业:

* 习题1174页至176页选择题

* 习题2176页第1,3

* 习题3:预习第八章,试做课后的选择题

 
原创粉丝点击