默然说话

一个异想天开的人做着异想天开的梦

牟勇ID:mouyong
64386次访问,排名1577好友4人,关注者6
我快乐,我存在
mouyong的文章
原创 108 篇
翻译 4 篇
转载 30 篇
评论 12 篇
默然的公告
如果要联系我,希望能说明来意,谢谢.

点击这里给我发消息

Google

最近评论
peigen:又~~~~为什么是又呢???
dcopperfield:顶下
gaoyunpeng:无意中进入到这个博客,很快就被里面的内容所吸引,感觉很有意思,不知道为什么会有这样的感觉,或许只是一种直觉上的吸引吧,一直在看博客里的文章,觉得很不错,天天等更新,哈哈,终于看到新的文章啦~
我会一直关注的~
mouyong:谢谢你的鼓励,我会更加努力。
了祝愿你实现自己的理想,达成自己的目标
wsspy007:牟老师,我发现你是我见过最好的老师了,为学生考虑最多,一切为学生着想,不知道牟老师还记得我么,张伟(无名小辈肯定你是忘记了),第一期跟杨大宇他们在一个班的,补考两次都没有及格,我现在不在昆明了,在胜利油田,这里一切都很好,一个月的薪金能顶得上昆明3-5个月的薪水,但是我不喜欢这份工作,钱固然多,但是从学校出来步入社会以后才发现,我还是应该走软件开发这条路,现在每天我只睡4-6个小时,工作12……
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 教案:Java第7章 类的方法收藏

    新一篇: 教案:Java第8章 数组 | 旧一篇: 教案:Java第6章 对象和类

    授课教师:牟勇

    课时: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
*/

    方法的注释: