20172325 2017-2018-2 《Java程序设计》第七周学习总结
教材学习内容总结
- 1、创建子类
(1) 子类是父类更具体的版本,但子类的实例化不依赖于父类;
(2) 继承有单项性,父类的对象不能调用子类的方法;
- 2、protected修饰符
(1)为了解决在子类中不能声明父类中公共变量的问题,提供了这种选择;
(2)封装性:private>protected>public;
(3)在这种修饰符下构造方法不会被继承; - 3、super引用
(1)使用super引用可以调用父类的构造方法;
(2)父类构造方法改变的同时,子类也需要改变; - 4、多继承
(1)java不支持多继承
(2)java依赖接口提供多继承的最好特性而不会增加歧义性; - 5、重写方法
(1)当子类和父类有相同的方法名和签名时,子类方法将重写父类的方法,子类的优先;
(2)重写内容只用于子类,不改变父类里的方法,也可以用super引用再次调用父类的方法;
(3)用final修饰符定义一个方法,子类不能重写该方法;
(4)方法重写在体现多态性时更为重要。 - 6、原则上避免使用影子变量。
- 7、类层次结构
(1)一个父类的子类可以是他自己子类的父类,层次结构由此建立,类似于tree的结构;
(2)最大化了复用现有类的可能性;
(3)要始终保持父、子类之间“是”的关系;
(4)应当合理的将类的公共特性保持在尽可能高的类层级上。 - 8、Object类
(1)所有的类都由Object类派生,也就是说所有的类都是Object类的子类;
(2)Java程序的每一个类都继承toString方法和equals方法 - 9、接口层次结构
类的继承和接口的继承不能重叠,即接口不能用于派生新类,类不能用于派生接口,仅当一个类设计为实现一个接口时,这个实现类和接口之间才有交互。
教材学习中的问题和解决过程
- 问题1:在上周的博客里,小助教对其中一个问题进行了提问,促使我对foreach语句和for语句进行了更加深入的探究。
- 问题1解决方案:经过多方面的查找资料和程序实践,我得到了较为完善的概念和区别,
总结如下:
(1).如果只是遍历集合或者数组,用foreach好些,快些。
(2).如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。
(3).总的来说,当你想要对很多变量进行相同的操作时,foreach是较为简单快捷的;而当你想要更加精确具体的控制很多变量进行不同操作时,for语句将会是更好的选择。
- 问题2:在学习super引用的时候看到课本上提到了super引用类似于this引用,这让我想到了问题一的差别,于是进行了一下查阅
问题2解决方案:
- 问题3:java不支持多继承,但是后面又讲到了类层次结构,既然不可以多继承为什么还存在类层次结构?
问题3解决方案:在和助教讨论之后,发现是我的理解出现了问题,多继承指的是一个类继承了很多类,即一个子类有多个父类;而类层次结构指的是一个父类有多个子类;举一个不恰当的例子就是,对于java来说,就如同父亲和儿子的关系,一个父亲可以有多个儿子,但一个儿子不可能有多个有血缘关系的父亲。(这种情况只针对java,其他的编程系统可能允许这种情况。)
代码调试中的问题和解决过程
- 问题1:在上上次的博客中我记录了一种问题,当时助教给出了解释,但是自己没有理解清楚,这次又遇到了相同的问题
问题1解决方案:这次我认真的查了资料,问了结对的同学,终于知道问题所在,其实很简单,就是因为我把对象和类搞混了,导致了类里面没有main方法,无法运行。调整之后就成功了;
还有一种情况是一开始在t包下创建了一个类,后面改了类名,把类名改成其他名字,之后运行下,就报这样的错误,这是因为一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。问题2:在一次休眠虚拟机的时候出现了卡顿,就一直卡着不动,后来强制退出,在启动的时候就不能正常启动了,而是进入了下面的界面
- 问题2解决方案:我尝试把电脑关机和重启,这能解决大部分电脑问题,但是这次没有成功,然后我看到了郭凯同学的博客,说不定能够有所帮助,可是输入命令行的结果是“Can't find 'sudo'. ”这就没有办法了。在我第二天我又试了一次无果之后,准备去找王老师的时候,敲门不在,我低头一看,虚拟机正常打开了,所以......谢谢王老师。但是为什么会出现这种情况现在还是不知道什么原因。
...
代码托管
上周考试错题总结
- 1、The "off-by-one" error associated with arrays arises because
A .the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far
B .the last array index is at length + 1 and loops may only iterate to length, missing one
C .the last array element ends at length - 1 and loops may go one too far
D .programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length
E .none of the above, the "off-by-one" error has nothing to do with arrays
解析:索引值必须大于等于0并且小于数组的元素个数。如果数组中有X个元素,则索引值是0~X-1. - 2、Assume that BankAccount is a predefined class and that the declaration BankAccount[ ] firstEmpireBank; has already been performed. Then the following instruction reserves memory space for
firstEmpireBank = new BankAccount[1000];
A .a reference variable to the memory that stores all 1000 BankAccount entries
B .1000 reference variables, each of which point to a single BankAccount entry
C .a single BankAccount entry
D .1000 BankAccount entries
E .1000 reference variables and 1000 BankAccount entries
解析:第一次银行帐户;为firstentity银行保留内存空间,它本身是指向BankAccount[]对象的引用变量。第一次银行账户=新银行账户[1000];实例化BankAccount[]对象为1000个BankAccount对象。 - 3、If an int array is passed as a parameter to a method, which of the following would adequately define the parameter list for the method header?(如果一个int数组作为参数传递给方法,下面哪个选项可以为方法头定义参数列表?)
A .(int[ ])
B .(int a[ ])
C .(int[ ] a)
D .(int a)
E .(a[ ])
解析:选择C,参数被定义为变量最初被声明为类型参数名称。 - 4、Given the following declarations, which of the following variables are arrays?(给定以下声明,下列哪个变量是数组?)
int[]a、b;
int c,d[];
A .a
B .a and b
C .a and d
D .a, b and d
E .a, b, c and d
解析:选择D,第一个声明声明a和b都是int数组。第二个声明声明c和d是int型,但d是一个int数组,c是变量。a b和d都是int数组。 - 5、A Java main method uses the parameter (String[ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.
A .true
B .false
解析:在java命令之后,在命令行输入的任何内容都将被接受为命令行参数。如果是由空格分隔的几个单词,那么每个单词都作为一个单独的字符串数组元素存储。 - 6、An array index cannot be a float, double, boolean or String.
A .true
B .false
解析:数组索引必须是int类型,或者可以扩展为int类型的值(因此,char、byte和short也是允许的)。 - 7、If a and b are both int arrays, then a = b; will
A .create an alias
B .copy all elements of b into a
C .copy the 0th element of b into the 0th element of a
D .return true if each corresponding element of b is equal to each corresponding element of a (that is, a [0] is equal to b [0], a [1] is equal to b [1] and so forth) and return false otherwise
E .return true if a and b are aliases and return false otherwise
解析:“=”是一个赋值运算符。如果这两个变量都是基元,那么左边的变量会得到右边变量的副本(所以如果a和b是int值并且b = 5,那么a就变成5)。但是,由于a和b是数组,所以引用变量a被设置为引用变量b,导致a和b引用内存中的同一个数组,或者它们现在是彼此的别名。
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 刘辰同学对课本的理解很到位,是很细致的类型,对于书上的概念理解的很清楚,有哪一个字眼不清楚她会追究到底,这样一来对知识点的掌握就能够很充分了。
- 代码上面的实践很到位
- 一点点不足:
- 刘辰同学在编程的时候思路上会有一定的局限性,就是说思路可能不是特别灵活,希望能够多多尝试。
基于评分标准,我给本博客打分:8分
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 129/129 | 1/1 | 20/20 | |
第二周 | 359/488 | 1/2 | 18/38 | |
第三周 | 521/1009 | 2/4 | 22/60 | |
第四周 | 1057/2066 | 1/5 | 30/90 | |
第五周 | 636/2702 | 1/6 | 30/120 | |
第六周 | 489/3191 | 1/7 | 28/158 | |
第七周 | 831/4022 | 1/8 | 41/199 |