鲸鱼的抽屉  

20155312 2006-2007-2 《Java程序设计》第四周学习总结

课堂笔记

  • Ctrl+shift+T调出三个窗口,分别是“vi编写代码”,“java,javac编译运行代码”,“JDB调试代码”。
  • 用Alt+1/2/3切换窗口
  • javac -d bin -g src/...调试
  • Path,ClassPath,SourthPath
  • jdb(java调试命令) -classpath bin ..(文件名)
    • run运行
    • stop设断点
      • 行断点
      • 方法断点
      • 条件断点(Ubuntu×)
      • 临时断点(Ubuntu×)
    • help(查看帮助命令)
    • stop in HelloJDB.main(进入函数)
    • 单步运行
      • next(直接运行完函数)
      • step(进入函数中单步跟踪)
      • locals(局部)
      • print i(打印变量的值)
      • list(看源代码运行到哪里),soursepath src;list(指出sourthpath)
    • stop at HelloJDB:5(在第五行设置断点)
    • stop(查看断点)
    • run(重启代码)
    • stop at HelloGDB:12(为了从上一个断点直接运行到这个断点) + continue

教材学习内容总结

  • OCP(Open-Closed Principle,开放-封闭原则):软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。
    • OCP可以用以下手段实现:(1)抽象和继承,(2)面向接口编程。
  • LSP(Liskov Substitusion Principle,Liskov替换原则):子类必须可以被其基类所代;使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它。
  • ISA原则是指功能上的。(行为功能(behavior)不是内在的、私有的,而是外在、公开的,是客户程序所依赖的接口)
  • UML:一种通用的建模语言,可以为许多面向对象建模方法的用户广泛使用。
  • 覆盖与重载区分:
    • 重载是让同一方法名的方法可以处理和返回不同类型的数据,而覆盖是在子类中改写父类的方法。
    • 相同点:被覆盖(重载)的函数的函数名必须是一样的。
    • 不同点:覆盖的函数的函数参数表必须和被覆盖的函数的参数表一样,重载的函数的函数参数表必须和被重载的函数的参数表不一样。
  • abstact使用
    • 注意要同时把public class ...声明为abstract类型,否则无法通过编译。
    • 抽象类不能使用new生成对象。
    • 抽象类必须被继承,抽象方法必须被重写(在子类中操作抽象方法,否则子类也是一个抽象类)。
  • 思考题1:“Square(正方形)类继承Rectangle(矩形)类合适吗?”
    • 答:合适,因为正方形是一种矩形,只需要在正方形类中extends继承长方形类,并扩充边长相等的方法。
  • superthis只能择一调用,并且只能用在构造函数的第一行。
  • instanceof:当左操作数是右类型的子类型,返回true。
  • hashCode():public int hashCode()返回该对象的哈希码值。覆盖equals()一定要同时覆盖hashCode()。
  • OCP:数据库认证专家。
  • ISP(Interface Segregation Principle,接口分离原则):客户不应该依赖他们并未使用的接口。
  • 代码怎么样才能有弹性又不过度设计:
    • DRY是 Don't repeat yourself 的缩写,意思是"不要重复自己"。
    • YAGNI是 You aren't gonna need it 的缩写,意思是"你不会需要它"。
    • Rule of three 称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化"。
  • Lambda:直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。

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

  • 『问题1』:书7.2.2匿名内部类中的“ClientQueue.java”文件编译提示如下:

- 「尝试1」,在```public class ClientQueue```后加```implements ClientListener```结果无法通过编译,截图如下:

  • 『问题1.1』:为什么在ClientQueue中可以直接使用接口ClientListener而不用进行implements?

  • 『问题2』:书中匿名内部类的语法没看懂,不知道例子是怎么使用匿名内部类的,不知道例子中哪个是匿名内部类。

  • 『解决』:在做课后题是终于理解了什么是内部类,它的基本形式是new 父类(或接口)() { ... }内部类就是大括号中间的部分。

    • 「注意」:匿名内部接口中不能添加父接口没有定义过的方法(如课后题第8题,会显示编译失败,如果在Some中添加void doService();可以编译成功)。
  • 『问题3』:ArrayList中.add(E e) remove(object o) get(int i)语法怎样使用?

  • 『解决』:查看API

    • get(int i):返回列表中指定位置的元素;

    • remove(Object o):移除第一个与o相同的元素;

    • add():添加某元素在列表尾。

    • 截图如下:

  • 『问题4』:String.format("...")这句的具体用法是什么?
  • 『解决』:参考博客JAVA字符串格式化-String.format()的使用,我了解到它的功能有很多,主要是让字符串按照指定格式输出。
  • 『问题5』:第六章课后第3题为什么显示的是默认定义的toString()返回值?
  • 『解决』:因为Some中重新定义的方法是ToString 而不是toString,而System.out.println()调用默认的tosTring()以取得字符串描述来显示。「注意」:如果要重新定义toString()类型必须是public
    • 『问题5.1』:重新定义toString()时一定要使用return String.format("...")的形式吗?直接使用return "..."可以吗?
    • 『解决』:尝试了一下是可以的。
  • 『问题6』:继承父类构造函数时,一定要使用super(...)吗?可以用this()吗?
  • 『解决』:试了一下,只能用super(),否则会编译错误,显示“无法将类 Some中的构造器 Some应用到给定类型;”(Some为父类)

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

代码还是以敲书中代码为主,一些代码片段自己做了补全。没有出现难以解决的问题,大部分都在微调后得到解决。

代码托管

  • 提交过程截图:

  • 代码量截图:

上周考试错题总结

  • 1.填空:Linux Bash中,(grep )命令可以进行全文搜索。

  • 原因:搜索命令掌握不熟,考试时没有查阅自己的笔记。

  • 分析:grep能使用正则表达式搜索文本,并把匹配的行打印出来。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。具体用法课参考博客linux grep命令详解

  • 2.填空:~0b1010的十进制值是(-11)

  • 原因:先做了下面的题,结果时间不够用了。计算方法已掌握。

  • 3.填空:System.out.println(52+25+””);的结果是(77)

  • 4.填空: p88 DecimalDemo2.java中 operand-openrand2的值是0.2。(X)

  • 原因:我用的旧版书里没有operand-openrand2。准备再借一本新版书。

  • 5.判断: Java中,=与==并没有在基本类型和类类型的不同。(OK)???

  • 6.填空:可以使用java.util.Arrays的(fill())方法把数组初始化成相同的值。

  • 分析:查看了API,发现fill(类型名 [] a,类型名 b)就是把数组a中每个元素都初始化成b。截图如下(以char类型为例):

  • 7.填空:“30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)

  • 解析:查看java.lang.Byte的API,截图如下:

  • 原因:自学时不细致,没注意到这个知识点。

  • 8.填空:Java中方法参数只用(传值)调用。

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

上一周学习看了老师写的学习指导,但遇到一部分自己不清楚的问题就跳过了并没有解决。这周的学习吸取了上周的教训。发现自己学第4,5章时很认真,但测验时有很多知识点丝毫没有印象,可能是因为教材版本的原因,也可能是自己自学能力比较差。下一阶段的学习的主要目标是提升自身自学能力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 4/0 1/3 28/80 下载了JDK和GIT
第二周 61/4 1/4 20/108 在unbuntu中熟练编写程序,熟练进行文件、目录等操作
第三周 684/65 1/5 27/108 初步配置vim方便使用,会自己解决一些代码问题
第四周 1238/749 1/6 23/135 大部分自己补全的代码片段不会出现问题,渐渐具备脱离书本编代码的能力

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

posted on 2017-03-19 16:49  鲸鱼的抽屉  阅读(131)  评论(2编辑  收藏  举报