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 。
点评过的同学博客和代码
- 本周结对学习情况
-
结对照片
-
结对学习内容
- 学习继承方面的知识,了解子类和父类之间的关系。
- 学习类和方法之间的关系,并动手实践,练习书上例题。
- 在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小时
-
改进情况:学习的越来越有规律,能把握住时间,该学习的时候学习,该玩的时候玩。