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脚本的运行结果截图)

上周考试错题总结

本周无错题

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    结伴伙伴暂未发表博客

  • 代码中值得学习的或问题:
    结伴伙伴暂未发表博客

  • 基于评分标准,我给本博客打分: 分。得分情况如下:

  • 参考示例

点评过的同学博客和代码

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

说实话,感觉结对学习这一个设置有些多余,我分析以下几点:

  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小时

(有空多看看现代软件工程 课件 软件工程师能力自我评价表)

参考资料

posted @ 2017-04-08 14:33  润润大魔王  阅读(270)  评论(9编辑  收藏  举报