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及原因,理解情况
- ...
结对及互评
评分标准
- 正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
- 模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
- 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
- 扣分:
- 有抄袭的扣至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 |