20182330 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
教材学习内容总结
- UML类图有助于呈现程序中类的内容和类之间的关系
- 类与对象:类是对象的蓝图。它定义的变量和方法,是由类实例化时得到的每个对象的组成部分。但是类不会为变量保留内存空间。每个对象有自己的数据空间,所以有自己的状态。
- 修饰符:是java的保留字,用在变量或方法的定义中,指定他们的具体使用特性。如private来声明,则不能从其定义所在的范围外访问该变量。
- 接口:对象的接口是定义在对象上的一组公用操作,即接口建立了对象为其他系统执行的一组服务。
- this:通常指向当前正在运行的对象。类的非静态方法一般为类的所有对象所共有,但它通过一个具体对象来调用。所以this引用指向的对象,正是执行的方法所依赖的对象。
- 聚合对象由其他对象组成,形成has-a关系
- 尝试编写不在java类库中的预定义类,定义对象可以实现的方法函数。
- 了解UML这种统一建模语言,学习类名、属性(数据)、操作(方法)之间的关系。
- 学习封装以及实现封装的修饰符(介绍了可见性修饰符中的public和private。在UML中+表示public可见性,-表示private可见性)
- 学习了访问器和修改器方法,访问器为getX,修改器为setX。这里的方法命名习惯将实例变量名的第一个字母大写。
- 了解方法的分析,类由数据声明和方法声明组成,方法是一组编程语句。java程序中的方法是一个类的组成部分。方法声明首部包括返回值类型、方法名及该方法所接受的参数的列表,构成方法体的语句则定义在由花括号定界的范围内。
- 方法的返回值类型必须与方法声明首部规定的返回值类型一致。定义类时,通常要定义一个构造方法以辅助创建类的实例,这个构造方法常用于初始化与每个对象有关的变量。构造方法没有任何返回类型,甚至也没有void类型。调用方法时,将把实参复制给被调方法的形参。
教材学习中的问题和解决过程
-
问题1:什么叫交互?接口是如何与对象交互的?
-
问题1解决方案:接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,接口就是java提供的一个面向对象的机制(就好比抽象方法和常量值的定义的集合,申明方法和类的申明方法差不多.
作用:
(1)通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。
(2)通过接口可以指明多个类需要实现的方法。
(3)通过接口可以了解对象的交互界面,而不需了解对象所对应的类。 -
问题2:return语句怎么使用?为什么不能一次返回多个实际参数?
-
问题2解决方案:方法的返回值类型必须与方法声明首部中规定的返回值类型一致。当方法不返回任何值时,用void作为返回值类型。一条return语句由保留字return和后续的可选表达式组成。执行return语句时,控制立即返回到调用方法,并返回表达定义式的返回值。
-
问题3:静态变量和静态方法有什么区别?
-
问题三解决方案:静态变量
可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况:
静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
静态方法
与类变量不同,方法(静态方法与实例方法)在内存中只有一份,无论该类有多少个实例,都共用一个方法。
代码调试中的问题和解决过程
-
问题1:书上代码。implements Complexity是什么意思
-
问题1解决方案:删去implements Complexity就可以了。extends与implements的不同:
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,也可以调用父类初始化 this.parent()。而且会覆盖父类定义的变量或者函数。这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。
JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了。实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
-
问题2:还是书上的代码,在vim里运行疯狂出错
- -
问题2解决方案:在idea中运行,发现int写成了void
-
运行成功!
代码托管
{{屏幕快照 2019-10-07 下午10.01.44.png(uploading...)}}
上周考试错题总结
-
错题1
-
分析:对象是类的实例。程序代码直接与对象交互,而不是类。理解有误!
-
错题2
-
分析:手滑点错了,一个变量的作用域被限制在它声明的方法中当然是局部变量啦。
-
错题3
-
分析:实例数据是组成类的实体,可以是任何可用的类型(无论是基元类型还是对象类型),也可以是公共类型或私有类型。通过使用对象作为实例数据,它允许在其他类的基础上构建类。如果一个类拥有其他类的实例数据,则这种关系称为has-a关系。这在这周总结中有,当时做题的时候没有思考。
-
错题4
-
分析:A、D没有参数,equals可以传递字符串进行比较。
-
错题5
-
分析:声明任何类型的构造函数(甚至是void)都是违反语法的。
-
错题6
-
分析:题目搞反了,形式参数是出现在方法头中的参数,实际参数是方法调用中的参数(传递给方法的参数)。
-
错题7
-
分析:所有Java方法都返回单个项,无论是对象的基本数据类型还是void。保留字continue用于退出循环的其余部分并再次测试条件。
-
错题8
-
分析:不应该以分号结束,应该在{}后加入更多指令。
-
错题9
-
分析:实例数据对所有类的方法都是全局可用的,因此这些方法不需要声明
-
错题10
-
分析:接口是外部代理如何与对象交互的。交互只能通过类定义中声明为公共的那些项来实现。
-
错题11
-
分析:Java允许在没有构造函数的情况下定义类。
-
错题12
-
分析:构造函数可能包含非值返回的返回语句。当时做的时候没有理解过来。
结对及互评
博客中值得学习的或问题:
- 关于接口的细小的问题提出的很好,说明看书看的很仔细,我要向他学习。
- 问题:问题阐述较为简单,可以更加深入剖析一下
代码中值得学习的或问题:
- 代码练习较少,希望多加练习
基于评分标准,我给本博客打分:13分。得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程(加3分)
- 代码调试中的问题和解决过程(加3分)
- 其他加分(加5分)
- 进度条中记录学习时间与改进情况(1)
- 感想,体会不假大空(1)
- 有动手写新代码(1)
- 排版精美(1)
- 错题学习深入(1)
- 点评认真,能指出博客和代码中的问题(1)
- 结对学习情况真实可信(1)
点评过的同学博客和代码
-
本周结对学习情况
20182314 -
结对照片
- -
结对学习内容
- idea代码量统计问题
- idea使用问题
- 接口问题探讨
其他
- 这周各种事情繁多,在编程上有所懈怠。国庆期间希望能够及时复习,查漏补缺。
- 暑假下载的idea好像有点问题,好多功能缺失,得好好研究研究。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 42/42 | 2/2 | 20/20 | |
第三周 | 394/471 | 2/4 | 25/45 | |
第四周 | 394/471 | 2/6 | 20/65 |
-
计划学习时间:20小时
-
实际学习时间:20小时
-
改进情况:学习时间缩短,需要加把劲了