20172306 《Java程序设计与数据结构》第七周学习总结

20172306《Java程序设计》第七周学习总结

教材学习内容总结

这一章的标题是继承。主要学习了有关继承的相关知识。其中在这五节中,我学到了以下几点:
1.继承主要表达的是“是”这个关系。子类是父类的一个更具体的类。
2.我觉得这里要注意protected和public还有private之间的区别。当用protected时,子类可以引用父类的变量或方法,而且不破坏封装性。但是private就不可以引用。
3.对于super,我觉得也是一个很重要的点。super用来调用父类的构造方法。在继承中,我认为很重要,应该多了解一些。
4.重写方法和影子变量。在这里,书中说很容易混淆。我认为重写是指子类重新写和父类相同名称的方法。指的是方法。而影子变量,我觉得和重写的意义差不多,只不过它指的是变量之间的关系。
5.对于层次结构,我觉得就是将共用性强的类提高在较高的层次,这样引用的时候,更加的方便。同时,应知道Object类是没有父类的。
6.抽象类的知识,理解起来和接口差不多。注意如果抽象类的子类没有为每一个从父类继承的抽象方法提供定义,则该子类仍然是抽象类。
7.子类中不可以重写final方法。final类不能再用于派生新类。

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

  • 问题1:书中有一句话叫:继承的目的之一就是复用现有软件。其中对于复用这个词不够理解。
  • 问题1解决方案:(https://wenwen.sogou.com/z/q811715400.htm)

    我上网了解了一下。复用在我的理解上,就是将已有的一些功能放在新的软件上。这和继承有一定的关联。将父类的一些方法和变量用在子类中。这和复用很相似。
  • 问题2:在学习第九章的时候,对于实例化和初始化不怎么懂了。
  • 问题2解决方案:和结对的同学一起讨论了,还问了一下同学,现在我说一下我理解的两者之间的区别。实例化一般是由类创建的对象,在构造一个实例的时候给了它一个空间,但是并没有给它一个具体的值。但是初始化就是,给一个变量一个具体的值。对于Student stut = new Student(); 这个就是实例化;而对于int a = 2;这个是初始化。
  • 问题3:对于重写的内容,想知道子类是否可以重写父类的所有方法。
  • 问题3解决方案:在书中的课后习题中,有一道题,问题是,子类可以重写其父类中的构造方法。这句话是错误的。解释是这样的:构造方法时一个特殊的方法,与类名相同,但是没有返回类型。如果试图重写父类的构造方法,将会产生语法错误,因为除了构造方法之外的所有方法都必须有返回类型。
  • 问题4:没有理解书中所说的,Java程序的每一个类都继承toString 方法和equals 方法?
  • 问题4解决方案:我在想这个的时候,想起我们在做实验4的时候,用力equals来作为类中的一个方法。又看了书中的解读,前两次的时候读起来也还是不怎么懂,再读我觉得是这个意思,我们在编写一个类时,如果你用到了toString 或者equals 时,那么这两个方法就是从Object的类中复写过来的。这也表示出了,Object是没有父类的。
  • 问题5:什么叫抽象类不必一定包含抽象方法?
  • 问题5解决方案:我在网上理解是,抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。对于抽象方法,一定要用public abstract修饰抽象方法,而private和protected不可以。如果一个类中有抽象方法,那么这个类一定是抽象类。

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

  • 问题1:20172306 《Java程序设计与数据结构》第七周学习总结

    这是我做的PP9.1的测试代码。会发现我用n的时候,它输出的sum值只是我之前的那个值,而不是我之前所有值的和。

  • 问题1解决方案:我将sum值放在了while的里面,运行了一下,发现成功了

    20172306 《Java程序设计与数据结构》第七周学习总结

    之前还有一个问题是我用了while的循环,但是却是无限循环根本停不下来,这个问题我上一篇博客有写过这个问题,后来莫名其妙的解决了,这次的问题我知道了,是因为,我再编写的时候,已经创建了another的变量,后来在利用another的时候,我有创建了另一个变量,导致我的while无限循环停不下来,无论输入Y还是n 都不会停。

  • 问题2:20172306 《Java程序设计与数据结构》第七周学习总结

    在这个中我又换了一种方式,结果出现了上面的问题

  • 问题2解决方案:通过学长的帮忙,我知道了解决方法,如果我把 int sum = 0放在while循环里,那么每一次sum都会是从0开始加。所以更改为如图

    20172306 《Java程序设计与数据结构》第七周学习总结

代码托管

20172306 《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(数组索引是0,程序员可以从索引1开始,也可以使用一个索引过远的循环。)

    B the last array index is at length + 1 and loops may only iterate to length, missing one(最后一个数组索引的长度为+ 1,循环可能只迭代到长度,缺少一个)

    C the last array element ends at length - 1 and loops may go one too far(最后一个数组元素以长度结束——1和循环可能会走得太远。)

    D programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length(程序员编写一个从0到长度1的循环,而数组实际上是从1到长度。)

    E none of the above, the "off-by-one" error has nothing to do with arrays 本题选C

  • 2.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?

    A (int[ ]) 如果一个int数组作为参数传递给方法,下面哪个选项可以为方法头定义参数列表?

    B (int a[ ])

    C (int[ ] a)

    D (int a)

    E (a[ ]) 本题选C

  • 3.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 假设BankAccount是一个预定义的类,并且该声明BankAccount[] firstrebank;已经被执行。然后,下面的指令存储内存空间。

    firstEmpireBank = new BankAccount[1000];

    A a reference variable to the memory that stores all 1000 BankAccount entries(存储所有1000个BankAccount条目的内存的引用变量。)

    B 1000 reference variables, each of which point to a single BankAccount entry(1000个参考变量,每个变量指向一个银行帐户条目。)

    C a single BankAccount entry(一个BankAccount条目)

    D 1000 BankAccount entries(1000年BankAccount条目)

    E 1000 reference variables and 1000 BankAccount entries(1000个参考变量和1000个BankAccount条目。) 本题选B 第一次银行帐户;为firstentity银行保留内存空间,它本身是指向BankAccount[]对象的引用变量。第一次银行帐户[1000];实例化BankAccount[]对象为1000个BankAccount对象。这意味着第一个帝国银行[0]和第一个帝国银行[1]和第一个帝国银行[999]现在都是合法的引用,每一个都是一个参考变量,因为每个引用都是一个BankAccount对象。因此,语句保留了1000个引用变量的内存空间。请注意,这1000个银行中没有一个。

  • 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是ints,但对于d,一个int数组。a b和d都是int数组。

  • 5.If a and b are both int arrays, then a = b; will

    A create an alias(创建一个别名)

    B copy all elements of b into a(将b的所有元素复制到a中。)

    C copy the 0th element of b into the 0th element of a(如果b的每个对应元素都等于a的对应元素(即a[0] = b[0], a[1] = b[1]等),则返回true,否则返回false。)

    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如果b的每个对应元素都等于a的对应元素(即a[0] = b[0], a[1] = b[1]等),则返回true,否则返回false。

    E return true if a and b are aliases and return false otherwise(如果a和b是别名,返回true,否则返回false。) 本题选A “=”是一个赋值运算符。如果两个变量都是原语,比左边的变量副本右边变量(如果a和b是int值,b = 5,然后将成为5)。然而,因为a和b是数组的引用变量设置为参考变量b,导致a和b都引用同一个数组在内存中,或者他们现在彼此的别名

  • 6.Arrays have a built in toString method that returns all of the elements in the array as one String with "\n" inserted between each element.(数组有一个内置的toString方法,它将数组中的所有元素作为一个字符串返回,并在每个元素之间插入“\n”。)

    A true

    B false 本题选B

  • 7.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.(Java主方法使用参数(String[]变量),以便用户可以运行程序并提供“命令行”参数。由于参数是一个字符串数组,因此用户不必提供任何参数。)

    A true

    B false 本题选A 主方法需要参数,以防程序员希望允许用户提供命令行参数。在java命令之后,在命令行输入的任何内容都将被接受为命令行参数。如果是由空格分隔的几个单词,那么每个单词都作为一个单独的字符串数组元素存储。例如,“java foo。class hi there“将在变量[0]和变量[1]中存储“hi”,以供程序使用。

  • 8.So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It's only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.(只要只访问ArrayList的元素,它的效率与数组的效率差不多。只有当一个人开始在ArrayList的前部分插入或移除元素时,它的效率才会恶化。)

    A true

    B false 本题选A ArrayList是作为数组实现的,只要其中一个只是访问ArrayList的元素,效率与数组的效率是一样的。但是,当对ArrayList的前部分进行插入或删除时,就会发生 大量的元素复制,从而降低其效率。

结对及互评

(http://www.cnblogs.com/20172325DYK/p/8905138.html)

  • 博客中值得学习的或问题:

    • 我觉得这次他的博客明显感觉比上次更加的认真了。其中,通过他的博客,我对于foreach的理解比之前更深了,但是我觉得他所写的只不过是内容方面,在实际中的解答我觉得还是需要我们一起尝试的。
    • 对于super和this的区别,我是知道的,在看了他的博客时,我觉得他在有怀疑的时候可以上网查找是很好的习惯,我以后会认真学习。
  • 代码中值得学习的或问题:

    • 我觉得这次他的代码问题,我曾经都遇到过,至于虚拟机的问题,暂时我们都没找到原因和解决的方案。
  • 基于评分标准,我给本博客打分:8分。

点评过的同学博客和代码

  • 本周结对学习情况
    • 一起学习了第九章的一些内容,练习了书中的例题。
    • 在编写PP作业的时候,我们是在一起的。我比他编的早一点,所以有问题的时候,我们一起解决了。
    • 在一起看书的时候,讨论了一下有关实例化和初始化的问题,然后是他跟我讲了一下两者的区别,我觉得他比以前进步很多。
  • 上周博客互评情况

    上周的互评,我觉得他说的很有道理,而且他说的问题也确实是我个人认为是我的不足之处。这次的博客,我在改正。

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

 这周学习了继承的内容,我觉得总体上,这周学习的时间还算多,这样的学习进度是可以接受的,对于例题的学习比前几周仔细些。而且,在自己编写的过程中,明显比前几次更有思路了,知道自己想表达什么,应该表达出什么了。这是我这周的收获。之前的学习可能因为不够仔细和扎实,有一些很基础的东西,很容易忘记,所以以后打算慢慢地把之前的内容仔细再看一看,可能在接下来的编程中会更加的容易。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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

参考资料

上一篇:java设计模式之——工厂模式


下一篇:【原创】Linux基础之用户和组