20162301 张师瑜《程序设计与数据结构》第七周学习总结

时间:2023-02-21 14:38:47

20162301 2016-2017-2 《程序设计与数据结构》第7周学习总结

蓝墨云班课学习内容总结

  • 25、26、27讲 包和访问权限:软件包的定义、作用,为一个类打包的方法,java中的访问权限,软件包的导入 ,访问权限和继承,protected权限
  • 28讲 接口的基本语法:接口的定义,接口的基本语法
  • 29讲 接口的应用:工厂方法模式
    20162301 张师瑜《程序设计与数据结构》第七周学习总结

教材学习内容总结

第9章 多态
  • 多态引用:①在不同的时候可以指向不同类型的对象②在运行时才将方法调用与它的定义绑定在一起。③在java中,可使用两种方法创建多态引用:使用继承及使用接口。
  • 引用变量可以指向声明继承与它的任一类的任何对象。
  • 接口:①接口是一组抽象方法,所以不能被实例化②多个类可以实现同一接口,并在类中提供它们各自对方式的定义。③接口只规定要实现的方法,不规定如何实现它们④一个类可以实现多个接口,这些接口都要列在implements子句中,用逗号隔开。⑤接口还可以包含常量,用final修饰符来定义。⑥Java标准类库中定义的两个有用的接口:Comparable和Iterator。
  • Comparable接口:提供对象之间通用的比较功能,只含有CompareTo一种方法,一个对象调用这个方法,另一个对象作为参数传递
  • Iterator接口:表示类的一组数据,提供一种从头至尾每次访问一个对象的机制,有hasNext和next两个基本方法。

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

  • 问题1:Comparable接口如何具体实现?
  • 解决方案:此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。参考于Comparable接口的实现和使用
  • 问题2:Iterator接口具体的实现
  • 解决方案:一开始迭代器在所有元素的左边,调用next()之后,迭代器移到第一个和第二个元素之间,next()方法返回迭代器刚刚经过的元素。
    hasNext()判断游标右边是否还有元素。若返回True,则表明接下来还有元素,迭代器不在尾部。参考于Iterator、Iterable接口的使用及详解

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

  • 问题1:编译书上P254的程序9.7时出现找不到符号count--的提示,但是仔细检查没有发现所写代码与书本上的区别。
  • 解决方案:仔细看书中9.1到9.7的程序,发现并没有count那个变量,试着删除之后就可以编译成功了。但是英文版教材上也有这一行,所以我不能断定是书本上的错误。后来看了娄老师在码云上所给的代码,发现老师的这个程序里也把这一行删除了。

代码托管

20162301 张师瑜《程序设计与数据结构》第七周学习总结

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

上周考试错题总结

  • 错题1:Which of the following types of methods do not have any return type (not even a void return type)? (以下哪类方法没有任何返回值类型(甚至没有void返回值类型)?)
A.methods declared as static(声明为static的方法)
B.methods declared as public(声明为public的方法)
C.methods declared as private(声明为private的方法)
D.constructors(构造函数)
E.all of the above have return types(以上均有选项均有返回值类型)
  • 原因:正确答案: D.原因:Constructors are the only methods that do not have any return type.They do not even have a void return type. All of the other methods must specify a return type or be declared as void.(构造函数没有任何返回类型的唯一方法。甚至不具有void返回类型。)这道题做错的原因就是因为对于构造函数的不熟悉。在浏览其他博客中,对构造函数有了初步的了解java中的构造函数谈谈java中的构造函数

  • 错题2:A method that has multiple definitions is an __________________ method(具有多重定义的方法称为方法___).

A.overloaded(重载)
B.overridden(重写)
C.overlooked(忽略)
D.overclocked(超频)
E.none of the above(以上均不是)
  • 原因:正确答案为A。方法重载:通过参数个数、类型及次序区分。方法重写:方法的名字和参数完全相同,方法体内容不同。重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数。重写是子类的方法覆盖父类的方法,要求方法名和参数都相同。可参考java中重载与重写的区别。C、D都不是java中的方法。

  • 错题3:If a service is so complex that it cannot be reasonably be implemented using one method, it is often helpful to decompose it to make use of ________________ support methods(如果一个服务非常复杂,以至于不能用一个方法来实现,一般通过将方法分解成几个____支撑方法).

A .static
B.aggregate(聚合)
C.private(私有)
D.public
E.final
  • 原因:正确答案为C。Private support methods are useful when a service is too complex to be defined in a single method. Therefore choice d is correct.(当一个服务太复杂,不能以单一的方法定义的时候,私人支持的方法是有用的。因此选项D是正确的。)

  • 错题4:

如果有以下程序片段:
class Some{
String ToString(){
 return "Some instance";
 }
  }
  public class Main{
  public static void main(String[] args){
   Some some = new Some();
   System.out.println(some);
  }
  }
以下描述正确的是
A.显示Some Instance
B.显示Some@XXXX,XXXX为十六进制的数字
C.发生ClassCastException
D.编译失败
  • 原因:正确答案为B。因为java的所有类都之间或间接地派生与Object类,所以Java程序中的每个类都继承了toString方法。toString()方法的作用是当一个引用对象和字符串作连接的时候,或者是直接打印这个引用对象的时侯,这个引用对象都会自动调用toString()方法,通过这个方法返回一个表示引用对象自己正常信息的字符串,而这个字符串的内容由我们自己去定义,默认的字符串内容是“类名+哈希编码”。可参考Object类及toString方法介绍

  • 错题5:If a subclasses constructor does not make an explicit call to a superclass's constructor, ______________________ (如果子类构造函数没有显式调用超类的构造函数,那么________).

A.a run-time error will result(将产生运行时错误).
B.a compile-time error will result(将产生编译时错误).
C.the constructor will be called anyway(构造函数不管怎样都会被调用).
D.the class will be implicitly declared as abstract(该子类将被隐式声明为abstract).
E.none of the above(以上都不是)
  • 原因:正确答案为C。The child's constructor will implicitly call the superclass's constructor if it is not done explicitly. This will ensure that the class is properly initialized.

  • 错题6:Once a method is overridden in a subclass, the original version can never be referenced from within the subclass(一旦方法被子类重写,原有的方法不能再在子类中引用).

    A.true
    B.false
  • 原因:正确答案为B。The original version of the method can be accessed using the super reference.(可以使用超级引用访问该方法的原始版本。)

  • 错题7:

如果有以下的程序代码:
Int x=100;
Int y=100;
Integer wx=x;
Integer wy=y;
System.out.println(x==y);
System.out.println(wx==wy);
在JDK5以上的环境编译与执行,则显示的结果是
A.true、true
B.true、false
C.false、true
D.编译失败
  • 原因:正确答案为A。这道题是有关于别名的概念。因为x、y均为100,wx、wy赋值分别被赋值为x、y,所以这两个变量互为别名(指向同一个String对象)。

  • 错题8:

如果有以下的程序代码:
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];
arr2 = arr1;
for(int value : arr2) {
System.out.printf("%d", value);
}
以下描述何者正确?
A.执行时显示123
B.执行时显示12300
C.执行时出现 ArrayIndexOutOfBoundException 错误
D.编译失败
  • 原因:当时不清楚printf("%d",i)//以十进制来输出i的值

结对及互评

  • 本周结对学习情况
    • 20162308
    • 结对学习内容
      • 马平川同学真心很厉害,在这周的实验4中,给了我指导和帮助。
  • 上周博客互评情况

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

这周因为有实验,所以周末大多数精力花在了实验上,对于教材上知识的学习较往常来说要少。书本上的内容与之前娄老师发过的视频有关联,所以这周的学习内容相对来说更加容易理解。但是,让我比较焦虑的是,我每周的测试都不尽人意,有很多犯粗心的地方,看到答案非常可惜。当然更多的是知识上的漏洞,大部分存在与之前学习的内容。因为每周都要跟上新的 学习内容,在复习的时候也是只复习上周新学习的知识,所以在测试的时候暴露了很多的问题。其次,我错了很多有关程序编译运行时的具体问题,这就说明了我的认知还光局限在理论基础上,实践能力薄弱(这也是我之前就意识到的),张旭升同学在我上周的博客下面评论,也提到了我在代码实践上的量比较的少,希望自己能够结合老师和同学的意见,慢慢改正自己的学习方法。加油吧!
20162301 张师瑜《程序设计与数据结构》第七周学习总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 57/57 1/1 24/24 绪论
第二周 338/395 1/2 18/42 数据和表达式
第三周 497/892 1/3 18/60 使用类和对象
第四周 839/1731 1/4 30/90 条件与循环
第五周 1018/2749 1/5 10/100 编写类
第六周 216/ 2965 1/6 15/115 继承
第七周 507 /3472 2/8 10/125 多态

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:10小时

  • 实际学习时间:10小时

  • 改进情况:多动手,多理解,多学习。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料