20162320刘先润第6周学习总结
学号20162320 《程序设计与数据结构》第6周学习总结
教材学习内容总结
- 继承,从已有的一个类派生一个新类的过程。比如类是设计图,对象则是设计图的具体体现,而基于已有的设计图来设计新设计图就是继承。两个类为父子类,用空箭头表示继承,由子类指向父类。在面对对象中,继承就是一个类得到另外一个类当中成员变量和成员方法。
- protected修饰符,即受保护的,方法或变量声明为保护可见性而设置。通俗的讲法就是一旦使用protected就可以在其派生类中使用,详细见例子程序8.2。
- super引用,用于访问父类的成员.,引用父类的构造方法。注:调用时用于构造方法的第一行。
- 方法的重写,即子类可以重定义继承来自父类的方法。
- 类层次,即父类派生多个子类,子类还可派生自己的子类。继承的机制是可传递的,即父类可将一个特性传给子类。
- Object类,所以的类都是由Object类派生的,如果类中没有extends声明继承了哪个父类,则默认这个类派生于Objec类,例如
- 抽象类,即一个不能被实例化的类。1.在类的头部含有abstract修饰符就可以将类声明为抽象类。2.抽象类不能生成对象 3.如果一个类当中包含抽象函数,那么这个类必须被声明为抽象类 4.如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类。
- 可见性,关键概念:私有成员被子类继承不能通过名字直接饮用,但可间接引用。
- 设计继承,它是面向对象软件的主要特征之一,软件设计必须谨慎且具体地声明继承。如果
final
修饰符用于一个类,则该类不能被继承。 - 多进程,在操作系统中能(同时)运行多个任务(程序)。多线程(thread):在同一个应用程序中有多个顺序流(同时)执行
- 线程的简单控制方法,中断线程
Thread.sleep()
(在括号内填入休眠的时间)和Thread.yield()
(这个方法会让当前线程让出CPU,但并不代表当前线程不会去抢占CPU),设置线程的优先级getPriority()
和setPriority()
,注:线程的优先级最大是10最小是1,可以使用Thread所提供的静态常量来设置线程的优先级。 - 类集框架,类集框架是一组类和接口,位于
java.util
包中,主要用户存储和管理对象,分三大类——集合(Set)、列表(List)、映射(Map)注:HashMap<String,String>
指的是先键后值的类型 equals
,对象的内容相等的条件:1.对象的类型相同(可以使用instance操作符进行比较);2.两个对象的成员变量的值完全相同
教材学习中的问题和解决过程
- 问题1:在程序8.1中使用了Dictionary这个类,而这个类有一个子类Book,为什么一定要将父类分出子类,直接用一个类岂不是更方便?
解决方案:我的理解是之所以创建子类是有意义的,Book类不能使用Dictionary类显式声明的变量或方法,子类是有限制的,因为子类是父类更特殊的情况,例如:字典可以含有页,因为所以的书都含有页;字典还有定义的部分,但并不是所以的书也都有定义的部分。 - 问题2:关于方法重写程序8.7中
parked.message()
和dates.message()
parked和dates的用法。
解决方案:教材上和网上并未给出解答,我的理解是,用来调用方法的对象决定实际执行的是哪个方法,在main中,当使用parked对象调用message方法是执行的就是父类的版本。而使用dates对象时执行的就是子类的版本。 - 问题3:抽象类到底是什么意思。
解决方案:视频讲解里面是这样解释的,在面向对象过程中,先抽象后具体。教材上说抽象类不能被实例化,不能被调用。这是不是代表它不能使用new
产生对象,那这个类感觉没什么用啊。
代码调试中的问题和解决过程
- 问题1:在蓝墨云班课的线程视频中,多线程程序抢CPU执行,为什么不能直接使用
ft.run();
方法
解决方案:通过代码调试发现使用ft.run();
的话不会存在多线程抢CPU,而是按照顺序执行。两个循环交替运行表示运行在不同线程中,当调用ft.start();
方法后,ft
这个线程处于就绪状态,在执行了几个循环后,ft
抢到了CPU,主线程则处于就绪状态,二者何时运行是无规律的。 - 问题2:如图
try catch
代码是什么意思? - 问题2解决方案:包裹,当编译出现异常时则使用
try catch
,例如
try
{
int i = 1/0;
}
catch(Exception e)
{
........
}
如果没有try的话,出现异常会导致程序崩溃。而try则可以保证程序的正常运行下去,一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让程序运行下去,并且输出为什么出错。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
本周无错题
结对及互评
点评模板:
-
博客中值得学习的或问题:
结伴伙伴暂未发表博客
-
代码中值得学习的或问题:
结伴伙伴暂未发表博客
-
基于评分标准,我给本博客打分: 分。得分情况如下:
点评过的同学博客和代码
-
本周结对学习情况
- 20162326齐力锋
- 结对照片
- 结对学习内容
-
上周博客互评情况
其他(感悟、思考等,可选)
说实话,感觉结对学习这一个设置有些多余,我分析以下几点:
1.我们班的同学对于java是从零开始学习,有学懂的同学,但是可以说是少数,但从一个对象不能给予太大的帮助
2.结对学习要求提供学习照片和学习内容,我认为这是不合理的,因为我们结对是大多数建立在问问题的基础上,是属于单方面进步,而不是共同进步
3.大多数同学是没有一定的时间和空间进行结对学习的
4.现在我相信班上大部分同学的结对学习这项内容都是为了应付作业,而不是学习的本质
综上4点我认为可以加以改进甚至取消结对学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 180/180 | 1/4 | 15/15 | |
第二周 | 465/645 | 1/5 | 18/33 | 学习了scanner |
第三周 | 456/1101 | 1/6 | 17/ 50 | 学会了如何编写数学公式等 |
第四周 | 620/1734 | 2/8 | 40/90 | 学了条件循环和数组 |
第五周 | 890/2604 | 1/9 | 25/115 | 接近学会了编写类 |
第六周 | 462/3068 | 1/10 | 30/145 | 了解了继承的概念 |
第七周 | 0/0 | 1/11 | 0/0 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:20小时
- 实际学习时间:30小时
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)