20172325 2017-2018-2 《Java程序设计》第七周学习总结

时间:2022-04-05 22:12:49

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解决方案:经过多方面的查找资料和程序实践,我得到了较为完善的概念和区别,20172325 2017-2018-2 《Java程序设计》第七周学习总结

总结如下:
(1).如果只是遍历集合或者数组,用foreach好些,快些。
(2).如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。
(3).总的来说,当你想要对很多变量进行相同的操作时,foreach是较为简单快捷的;而当你想要更加精确具体的控制很多变量进行不同操作时,for语句将会是更好的选择。

  • 问题2:在学习super引用的时候看到课本上提到了super引用类似于this引用,这让我想到了问题一的差别,于是进行了一下查阅
  • 问题2解决方案:20172325 2017-2018-2 《Java程序设计》第七周学习总结

  • 问题3:java不支持多继承,但是后面又讲到了类层次结构,既然不可以多继承为什么还存在类层次结构?
  • 问题3解决方案:在和助教讨论之后,发现是我的理解出现了问题,多继承指的是一个类继承了很多类,即一个子类有多个父类;而类层次结构指的是一个父类有多个子类;举一个不恰当的例子就是,对于java来说,就如同父亲和儿子的关系,一个父亲可以有多个儿子,但一个儿子不可能有多个有血缘关系的父亲。(这种情况只针对java,其他的编程系统可能允许这种情况。)

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

  • 问题1:在上上次的博客中我记录了一种问题,当时助教给出了解释,但是自己没有理解清楚,这次又遇到了相同的问题
  • 问题1解决方案:这次我认真的查了资料,问了结对的同学,终于知道问题所在,其实很简单,就是因为我把对象和类搞混了,导致了类里面没有main方法,无法运行。调整之后就成功了20172325 2017-2018-2 《Java程序设计》第七周学习总结
    还有一种情况是一开始在t包下创建了一个类,后面改了类名,把类名改成其他名字,之后运行下,就报这样的错误,这是因为一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。

  • 问题2:在一次休眠虚拟机的时候出现了卡顿,就一直卡着不动,后来强制退出,在启动的时候就不能正常启动了,而是进入了下面的界面20172325 2017-2018-2 《Java程序设计》第七周学习总结

  • 问题2解决方案:我尝试把电脑关机和重启,这能解决大部分电脑问题,但是这次没有成功,然后我看到了郭凯同学的博客,说不定能够有所帮助,可是输入命令行的结果是“Can't find 'sudo'. ”这就没有办法了。在我第二天我又试了一次无果之后,准备去找王老师的时候,敲门不在,我低头一看,虚拟机正常打开了,所以......谢谢王老师。但是为什么会出现这种情况现在还是不知道什么原因。
  • ...

代码托管

20172325 2017-2018-2 《Java程序设计》第七周学习总结
20172325 2017-2018-2 《Java程序设计》第七周学习总结

上周考试错题总结

  • 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

参考资料