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

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/1291/120/20
第二周359/4881/218/38
第三周521/10092/422/60
第四周1057/20661/530/90
第五周636/27021/630/120
第六周489/31911/728/158
第七周831/40221/841/199

参考资料

  • Java学习笔记(第8版)

  • 《Java学习笔记(第8版)》学习指导

  • ...

以上是 20172325 2017-2018-2 《Java程序设计》第七周学习总结 的全部内容, 来源链接: utcz.com/z/391239.html

回到顶部