20172306《Java程序设计》第8周学习总结
教材学习内容总结
第十章最开始自己看的时候,没怎么看懂,等老师讲完之后,又看了一遍,就理解了很多。第十章主要学习了以下几点:
1.对于几个概念性内容的记忆:多态性引用能够随时间变化指向不同类型的对象;可用类名以及接口名声明一个引用变量等。
2.动态绑定的效率低的原因是它是在程序执行期间进行的。
3.由继承和接口实现多态性:我认为按照我的理解,就是其他的类在继承父类或者利用接口的时候,我们在调用方法时,是视情况而定的。
4.选择性和插入性排序:这个我在上一个博客中写了具体的理解思路。(http://www.cnblogs.com/lc1021/p/8969199.html)
5.线性和二分搜索:线性就是从左向右一个一个搜索,二分搜索类似于高中数学中的二分法,两者之间是相同的,都是从中间找,不断的缩小范围。
教材学习中的问题和解决过程
- 问题1:我认为书中对于绑定的内容不够清晰,我理解起来只能单纯的知道,后绑定(动态绑定)的效率低于编译阶段的绑定效率,后绑定发生在编译阶段。
- 问题1解决方案:我在网上主要找了一下在Java中对于绑定的一些说法。绑定分静态绑定和动态绑定。静态绑定通俗的理解就是在编译过程中就已经知道这个方法到底是哪个类中的方法,java当中的方法只有final,static,private和构造方法是前期绑定;动态绑定也叫做后绑定,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。这是我参考的博客(https://blog.csdn.net/zhangjk1993/article/details/24066085)。我觉得这篇博客对于绑定的解释比较的详细而且易懂。
- 问题2:在二分搜索中,会从中间开始分段,就像数学中的二分法一样,但是如果所有的排列数是偶数,这样的话,中间就没有数字,这种情况下该怎么办?
- 问题2解决方案:这个问题是我看书不够仔细,后来在书中找到了这种情况下该怎么办。应该忽略小数部分,取两个中点的第一个为新的中点。然后继续搜索。
代码调试中的问题和解决过程
-
问题1:在做PP10.4的时候,我最开始以为只需要改动movies的代码就可以了,而其他的引用的类是不用动的,于是我最开始是这样的
-
问题1解决方案:这个很快就出现了问题,因为发现,我们的Contact是针对姓和名来说的,而DVD中显然是识别不出来的。因此,我们不仅要更改movies,对其相应的类也同样要进行重新的编写。对应的类有DVD 、DVDCollection还有Sorting。而且应该在这些类中相应的加一些东西,以满足这些类之间的串联。
-
问题2:还是PP10.4的代码,我在DVD和DVDCollection还有Sorting中进行了如下的增加。但是有这样的一个问题
-
问题2解决方案:这个问题还没有解决。
代码托管
上周考试错题总结
- 1.Which of the following is an example of multiple inheritance?(下面哪个是多重继承的例子?)
A A computer can be a mainframe or a PC(计算机可以是大型机或PC)
B A PC can be a desktop or a laptop(个人电脑可以是台式电脑或笔记本电脑)
C A laptop is both a PC and a portable device(笔记本电脑既是个人电脑,也是便携式设备。)
D A portable device is a lightweight device(便携设备是一种轻量级设备)
E Macintosh and IBM PC are both types of PCs (Macintosh和IBM PC都是PC的类型)本题选C 多重继承意味着一个给定的类继承了不止一个父类。在上面列出的那些电脑中,一台笔记本电脑从个人电脑和便携设备上继承了一些属性。A、B和E的答案都是单继承的例子,其中一个类至少有两个孩子(在A中,计算机有儿童主机和PC,在B中,PC有儿童桌面和笔记本电脑,在E,PC有儿童Macintosh和IBM PC)。答案D表示一个类的属性。这里主要是要分清多继承的概念。 - 2.If a programmer writes a class wanting it to be extended by another programmer, then this programmer must(如果一个程序员写了一个类,希望它被另一个程序员扩展,那么这个程序员就必须)
A change private methods and instance data to be protected(将private方法和实例数据变成protected)
B change public methods and instance data to be protected(将public方法和实例数据变成protected)
C change all methods to be protected(将所有的方法变成protected)
D change the class to be protected(将类变成protected)
E none of the above, the programmer does not have to change anything(以上都不是,程序什么都不需要改变) 本题选A 这是书中的知识,是我的大意。 - 3.Abstract methods are used when defining在定义时使用抽象方法
A interface classes(接口类)
B derived classes(派生类)
C classes that have no constructor(没有构造函数的类)
D arrays(数组)
E classes that have no methods(没有方法的类)本题选A 接口是一个定义了它的一些组件的类,但是留下了其他组件(方法)供您实现。因此,这些组件(方法)被称为抽象,并在接口类中定义为抽象。 - 4.Which of the following is true regarding Java classes?关于Java类,下列哪一项是正确的?
A All classes must have 1 parent but may have any number of children (derived or extended) classes(所有类必须有一个双亲,但可能有任意数量的子节点(派生或扩展)类)
B All classes must have 1 child (derived or extended) class but may have any number of parent classes(所有类必须有1个子(派生或扩展)类,但可能有任意数量的父类)
C All classes must have 1 parent class and may have a single child (derived or extended) class(所有类必须有一个双亲类,并且可能有一个单独的子(派生或扩展)类)
D All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes(所有类都可以有任何数量(0或更多)父类和任意数量的子(派生或扩展)类)
E All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes(所有类都可以有0或1父类和任意数量的子类(派生或扩展)类) 本题选A 这个题基本是理解的,就是在Object类的问题上有了歧义 - 5.A variable declared to be of one class can later reference an extended class of that class. This variable is known as一个被声明为一个类的变量稍后可以引用该类的扩展类。这个变量被称为
A protected
B derivable可诱导的
C cloneable
D polymorphic多态
E none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class 本题选D 多态的术语表示变量可以有多种形式。在一般情况下,Java被强烈定义为,一个变量,一旦声明为类型,就永远不能改变为不同的类型。唯一的例外是多态变量可以是任何类型的派生类(尽管不是在同一时间,变量可以从一种类型转换为另一种类型)。 - 6.In order to determine the type that a polymorphic variable refers to, the decision is made为了确定多态变量所指代的类型,做出了决定
A by the programmer at the time the program is written程序员在编写的时候
B by the compiler at compile time编译时编译器
C by the operating system when the program is loaded into memory当程序被加载到内存中时,操作系统
D by the Java run-time environment at run time在运行时Java运行时环境中
E by the user at run time在运行时由用户 本题选D 多态变量可以有许多不同的类型,但是在程序执行之前,它不知道它采用了哪种类型。在这个变量被引用的时候,必须做出决定。这个决定是由运行时环境根据变量的最新赋值决定的。 - 7.Using the reserved word, super, one can使用保留的词super可以
A access a parent class'constructor(s)访问父类的构造方法
B access a parent class'methods and instance data访问父类的方法以及实例数据
C access a child class'constructor(s)访问子类的构造方法
D access a child class'methods and instance data访问子类的方法和实例数据
E none of the above 本题选E super提供了一种机制来访问父类的方法和实例数据(不管它们是否被隐藏)。此外,可以使用super来访问父类的构造器(s)。所以正确的答案是A和B的组合这不是一个选项所以正确的答案是E。 - 8.Interface classes cannot be extended but classes that implement interfaces can be extended.(接口类不能被扩展,但是实现接口的类可以被扩展。)
A true
B false 本题选B 任何类都可以被扩展,无论它是一个接口,还是实现一个接口,或者两者都没有。唯一的例外是,如果该类被显式地用“final”这个词进行修饰,在这种情况下,它不能被扩展。 - 9.A derived class has access to all of the methods of the parent class, but only the protected or public instance data of the parent class.(派生类有权访问父类的所有方法,但只访问父类的受保护或公共实例数据。)
A true
B false 本题选B 由于方法也可以声明为private,所以任何私有方法都不能被派生类访问。因此,派生类只能访问父类的受保护的公共方法和实例数据。 - 10.If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.(如果类AParentClass有一个protected实例数据x,而AChildClass是一个派生类的类,那么AChildClass可以访问x,但是不能重新定义x为另一种类型。)
A true
B false 本题选B 派生类可以重新定义父类的任何实例数据或方法。父类的版本现在是隐藏的,但是可以通过使用super来访问,就像在super x中一样。 - 11.Although classes can be inherited from one-another, even Abstract classes, interfaces cannot be inherited.(尽管类可以从另一个继承,甚至是抽象类,但是接口不能被继承。)
A true
B false 本题选B 接口拥有普通类所做的所有继承属性。因此,您可以创建一个接口继承层次结构,就像您可以创建类继承层次结构一样。但是,您不能做的是实例化一个必须实现的接口。
结对及互评
点评模板:
-
博客中值得学习的或问题:
- 我觉得他在博客中的总结的很详细
- 他对于自己不懂得问题可以上网去查
- 我觉得他这次会试一下,这是他进步的地方
-
代码中值得学习的或问题:
- 我觉得他值得我学习的地方在于他敢于尝试,而且很执着
-
基于评分标准,我给本博客打分:8分。
点评过的同学博客和代码
(http://www.cnblogs.com/20172325DYK/p/8982580.html)
- 本周结对学习情况
- 我们一起学习了第十章的有关排序和搜索的内容。
- 20172325邓煜坤对于选择排序法和插入排序法的过程理解的不够透彻,然后我给他讲了一些,他理解的很快。
- 对于后面的习题,我们一起进行了编程。
其他(感悟、思考等,可选)
这周因为除了第十章还有一个结对的实验刚刚起步,还连着五一的激动假期,我觉得最开始知道这么多的东西的时候十分的烦躁,内心十分的抗拒不想做。但是知道也没什么用,一点点做,但是好在老师讲了第十章的相关内容,这样我理解的比较快一些。而且这一章主要是概念的理解,再就是排序和搜索,都是套路,所以还算是可以理解的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 193/200 | 1/1 | 20/20 | |
第二周 | 247/440 | 1/1 | 22/42 | |
第三周 | 445/895 | 2/2 | 20/62 | |
第四周 | 885/1780 | 1/1 | 43/105 | |
第五周 | 775/2555 | 1/1 | 55 /160 | |
第六周 | 1171/3726 | 1/1 | 38/198 | |
第七周 | 596/4322 | 1/1 | 60/258 | |
第八周 | 569/4891 | 2/2 | 55 /313 |