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


    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就接近了。

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

    参考资料

  • 相关阅读:
    hdu2063 匈牙利算法 二分最大匹配模版题
    经典dp 编辑距离
    新博客的第一道题 蓝桥杯 蚂蚁感冒
    cv.GaussianBlur参数选择 && contrast stretching
    大数据 week2 Hadoop and HDFS
    大数据 week2 Hadoop and HDFS
    抖音二面记录
    weight decay
    Pillow Image Filter
    UNSW CV第三课 下
  • 原文地址:https://www.cnblogs.com/zjy1997/p/6580981.html
Copyright © 2020-2023  润新知