20182334 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结

20182334 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结

教材学习内容总结

本周学习了第五章和第八章。

第五章:

  • 首先学习了类的定义,明确了关于类的很多知识,再通过类来编写方法,把方法写在同一个文件夹下,可以调用。
  • 之后了解了UML类图,并通过IDEA协助UML进行画图,使程序更加直观。
  • 再学习了关于封装的知识:为了防止对数据的不合适的访问,对象应该是封装的。
  • 了解关于静态变量和静态方法,我们常用的static就是用来声明静态变量的修饰符。Math类的所有方法都是静态的。静态变量由类中的所有实例所共享。
  • 依赖:通俗来说就是一个类调用其他类的方法。
  • 聚合:是由各个对象组合而成的,描述为has-a关系。
  • this引用:让一个对象指向自己。

第八章:

  • 继承:从一个已有的类派生一个新类的过程,目的是为了更快更节约的完成程序。继承会产生父类和子类,他们之间建立了is-a关系。保留字extends说明从已有类中派生一个新类。
  • 在封装和私有的两难境地中,出现了protected修饰符,既可以提供最恰当的封装机制,也保持了其在原来类中可见性修饰符规定的权限。在满足可引用的程度上:public > protected > private。
  • super引用:在一个类中指向父类。
  • 多重继承:在Java中不支持多重继承,出现了接口,提供了多重继承的特性。
  • 类层次:一个类可以是一个或多个其他类的父类。

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

  • 问题1:在练习书上的例题时,写类和方法时,在Linux里遇到了麻烦,编译一直无法找到文件。

  • 问题1解决方案:在询问同学后得知是因为没有在同一文件夹下,我思索了一会儿,
    发现的确如此,于是便更改目录:

  • 问题2:在学习UML类图时,不清楚各个图形和箭头等代表什么意思,还有其增加变量或者定义,都不清楚。

  • 问题2解决方案:在IDEA中有快捷键会自动生成类图:shift+Ctrl+alt+u,

  • 问题3:在书上调用类时,不明白下图画圈的地方有什么联系

  • 问题3解决方案:在联系C语言之后发现中间有很多共通的地方,比如说实参形参,数据的类型等,一联系后,发现其实很简单。

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

  • 问题1:在写一个小程序时,如下图student在调用People的方法时,找不到run,无法run。

  • 问题1解决方案:咨询了老师,得知没有主类,所以没法编译,于加上了主类,编译成功。

  • 问题2:在敲代码的过程中,发现void类型总是没有返回值,

  • 问题2解决方案:搜索了下资料:

  • 问题3:在第一个实验里,我会产生逻辑错误,比如,我会忽略当成绩小于0时的情况,结果测试不成功,让人头大,

  • 问题3解决方案:后来才发现自己少想了一种情况,立马再次思考,发现是漏想了一种情况,

  • 问题4:在StringBuffer里我不明白charAt、indexOf分别是啥意思,于是在写测试程序时,出现多次测试不过。

  • 问题4解决方案:在看书查资料看老师发的教程后,明白charAt是指在一串字符串里面猜你想要的字符,并判断第几位是,比如下图,括号里的数字代表字符串里的第几位,单引号里面的字符是你猜测的。

那么一明白这个道理后,测试通过。

  • 问题5:不明白indexOf是啥意思,小小的脑袋,大大的疑问。

  • 问题5解决方案:同上一个问题一样,自己一遍一遍的测试,观察中间的规律,之后再听同学的讲解,明白其中的道理:所谓indexOf,如下图,在括号里的字符是你要猜它在字符串里是第几位开始,如果字符串里没有这个字符,那么就是-1。

  • 问题6:在第4个实验里,不明白复数的算法,在定义方法时,会产生很多疑问和错误。

  • 问题6解决方案:世上无难事只怕有心人,在我的不懈努力下,我终于搞懂了一些这方面的知识。在定义方法时,要在原函数的基础上,定义常量和方法。


代码托管

上周考试错题总结

  • 错题1:A variable whose scope is restricted to the method where it was declared is known as a(n)
  • A .parameter
  • B .global variable
  • C .local variable
  • D .public instance data
  • E .private instance data

局部变量是那些声明它们的方法的“局部”变量,也就是说,它们只能在方法内部访问。全局变量是那些可以从任何地方访问的变量,而参数是传递给方法的变量。可以将实例数据视为整个对象的全局变量。故答案选 C .


  • 错题2:An example of passing message to a String where the message has a String parameter would occur in which of the following messages?
  • A .length
  • B .substring
  • C .equals
  • D .toUpperCase
  • E .none of the above, it is not possible to pass a String as a parameter in a message to a String

长度和toUpperCase消息没有参数,子字符串有两个int参数。对于equals,必须将字符串作为参数传递,以便接收消息的字符串可以与作为参数传递的字符串进行比较。故答案选 C .


  • 错题3:Consider a method defined with the header: public void doublefoo(double x). Which of the following method calls is legal?
  • A .doublefoo(0);
  • B .doublefoo(0.555);
  • C .doublefoo(0.1 + 0.2);
  • D .doublefoo(0.1, 0.2);
  • E .all of the above are legal except for D

对于A,值0 (int)被扩大为double。在C的情况下,添加操作产生0.3,然后调用doublefoo。D中的参数列表是非法的,因为它包含两个双参数,而不是1。故答案为 E .


  • 错题4:What happens if you declare a class constructor to have a void return type?
  • A .You'll likely receive a syntax error
  • B .The program will compile with a warning, but you'll get a runtime error
  • C .There's nothing wrong with declaring a constructor to be void
  • D .The class' default constructor will be used instead of the one you're declaring
  • E .None of the above

It is a syntax violation to declare a constructor with any type even void so you'll receive a syntax error.故答案为 A .


  • 错题5:Formal parameters are those that appear in the method call and actual parameters are those that appear in the method header.
  • A .true
  • B .false

这个问题颠倒了两个定义。形式参数是出现在方法头中的参数,实际参数是方法调用中的参数(传递给方法的参数)。
故答案为 B 。


  • 错题6:The following method header definition will result in a syntax error: public void aMethod( );
  • A .true
  • B .false

语法错误的原因是它以“;”符号结束。相反,它需要在{}后面加上括号内的0或更多的指令。抽象方法将以“;”结束,但是这个头没有定义抽象方法。故答案为 A 。


  • 错题7:Defining formal parameters requires including each parameters type.
  • A .true
  • B .false

为了让编译器检查方法调用是否正确,编译器需要知道传递的参数的类型。因此,所有的形式参数(那些在方法头中定义的参数)必须包含它们的类型。这是使Java成为强类型语言的一个因素。
故答案为 A 。


点评过的同学博客和代码

  • 本周结对学习情况
    • 20182321

    • 结对照片

    • 结对学习内容

      • 学习继承方面的知识,了解子类和父类之间的关系。
      • 学习类和方法之间的关系,并动手实践,练习书上例题。
      • 在UML类图里,碰到的种种疑惑,都会互相问清楚。
  • 上周博客互评情况

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

一周又飞快的过去了,这周在我看来,进步很大,在上周的学习过程中,不明白类和方法之间的关系,但在这一周的不懈努力下,知道了如何学习这方面的知识,虽然学习的过程中很不轻松,但在获得成就后会很开心。一个月过去了,自己也学到了很多东西,能明白自己的定位,也能清楚自己的水平,知道自己薄弱点在哪里,如何补充、加强,在下一周的学习生活中,我会加强代码的练习,增加代码量,争取敲到2500行。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 212/212 2/2 17/17
第二周 132/344 2/4 17/34
第三周 689/1033 1/5 23/67
第四周 664/1697 2/7 20/87
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:学习的越来越有规律,能把握住时间,该学习的时候学习,该玩的时候玩。

参考资料

posted on 2019-09-30 16:13  cistineup  阅读(226)  评论(2编辑  收藏  举报