20182320 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结

20182320《程序设计与设计结构》第六周学习总结

教材学习内容总结

1. 第九章

1.1 后绑定

首先,我们调用一个类的方法,需要经历下面几个步骤:

(1)创建引用对象,例如

Scanner scan;

(2)将引用对象指向一个对象

通常是如下指向引用时声明的类

scan = new Scanner("abc");

但是多态引用如果通过继承实现多态可以指向声明类的子类,假设Scanner有个子类Scn

Scn scn = new Scn();
scan = scn;

可简写成

scan = new Scn();

(3)调用类的方法

int x = scan.nextInt();

绑定指的是将方法的调用与方法的定义绑起来,即(2)和(3)绑起来。

普通的方法调用和定义可以再编译时完成,但是多态引用的要到运行时才能完成,这个延时的提交被称为后绑定或动态绑定

1.2 通过继承实现多态

根据上面的(2)举的例子和第八章学习的继承,我们可以用下面这个例子进行说明如何用继承实现多态。

这里有一个类Mammal,他有个子类Horse

Mammal pet;//先创建Mammal的引用变量

Horse a = new Horse();//创建Horse的对象

pet = a;//pet指向Horse的对象

这就是多态的实现了,虽然pet声明是一个Mammal变量,但是却能够指向继承于它的子类的对象。

注意: 若在这里进行pet的方法调用,只能调用Mammal类和Horse类都有的方法,而且这个同名的方法应该是调用是Horse中的版本。

1.3 接口

1.3.1 什么是接口?

答:接口是一组抽象方法,可以用来创建多态引用。

1.3.2 接口的特点

一、它和抽象方法一样,没有方法体。

二、一个类要实现一个接口,需要在类后加“implements 接口名”,并给出接口中每个方法的定义。

三、当一个类实现一个接口时,它可以访问接口中定义的所以常量和方法。

四、接口可以派生

五、接口中的所有成员都是公有的

1.3.3 Comparable接口

是一个定义在java.lang包中的接口,提供对象之间的比较功能。

1.3.4 Iterator接口

是一个定义在Java标准类库的接口,用来表示类的一组对象,并提供从头至尾每次访问一个对象的功能。

1.4 通过接口实现多态

首先有一个接口Speaker:

public interface Compare {
    public void Input(String str1,String str2);
    public void Cp();
}

有一个Man类实现了它:

public class CompareSon implements Compare{

    String str3,str4;

    @Override
    public void Input(String str1, String str2) {
        str3=str1;
        str4=str2;
    }

    @Override
    public void Cp() {
        if (str3.length()>str4.length()){
            System.out.println("str1>str2");
        }
        else if (str3.length()==str4.length()){
            System.out.println("str1=str2");
        }
        else {
            System.out.println("str1<str2");
        }
    }

    public void Connect(){
        System.out.println(str3+str4);
    }
}

则在下面这个例子可提现接口实现的多态:

public class Run {
    public static void main(String[] args) {
        Mammal mammal;
        mammal=new Dog();
    }
}

2.第十章

2.1 异常

2.1.1 什么是异常?

它是一个对象,定义了不经常出现的或错误的情形。

Java预定义了一组程序运行可能会出现的异常和错误。

2.1.2 异常的处理
(1)不处理异常

程序会终止,然后产生一条信息,描述发生的异常和异常位置。

(2)在异常发生的地方处理

使用try-catch子句捕获异常,finally子句无论是异常退出程序还是正常捕获都会执行。

(3)在程序的其他地方处理异常

如果一个异常在它发生的地方没有被捕获,它会向调用它的方法,这个叫异常传播

处理方法是在调用它的方法出使用try-catch或是在方法头加上throws抛出异常。

2.1.3 自定义异常

想要自己定义一个异常类,只需要让他派生于Exception类就行了。

2.1.4 必检异常和免检异常
(1)必检异常:

必须被一个方法捕获或在方法头的throws子句抛出

(2)免检异常:

不需要被捕获或抛出。

只有RuntimeException或其后代类的对象才是免检异常,其余都是必检异常。

教材学习中的问题和解决过程

  • 问题1:当使用多态引用,将父类的声明的对象指向子类时,这个父类的对象是否可以调用子类的方法?
  • 问题1解决方案:实践


  • 问题2:当子类对象强制转换成父类时,是否能调用父类的方法?
  • 问题2解决方案:实践

代码调试中的问题和解决过程

  • 问题1:如下,想使用“==”来实现字符串是否相等的检测
  • 问题1解决方案:CSDN

突然想起来这相当于是比较str和“DONE”的地址,这两个的内容虽然一样,但地址永远不可能相等。

因此要用String类的equals方法来判断。

  • 问题2:想像C语言中那样直接使用对象数组,但是报错,如下:
  • 问题2解决方案:CSDN

    应该要向上面那样,分别创建对象,再将对象赋给数组。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1及原因,理解情况
  • 错题2及原因,理解情况
  • ...

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):
    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

其他(感悟、思考等,可选)

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

猜你喜欢

转载自www.cnblogs.com/leonzheng/p/11669101.html
今日推荐