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

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

参考资料

20155312 张竞予 2006-2007-2 《Java程序设计》第四周学习总结的更多相关文章

  1. 自学java坎坷之路——20155312张竞予

    20155312 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周并没有在课堂上对教材内容进行学习,学习内容概括如下 课程分数构成,其中包括课堂测验(每 ...

  2. 20155312 张竞予 Exp9 Web安全基础

    Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...

  3. 20155312 张竞予 Exp 8 Web基础

    Exp 8 Web基础 目录 基础问题回答 (1)什么是表单 (2)浏览器可以解析运行什么语言. (3)WebServer支持哪些动态语言 实践过程记录 1.Web前端:HTML 2.Web前端jav ...

  4. 20155312 张竞予 Exp3 免杀原理与实践

    Exp3 免杀原理与实践 目录 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法有哪些? 实验总结与体会 实践过程记录 正确使用msf编码器,msfveno ...

  5. 做中学learning by doing——个人感想20155312张竞予

    做中学learning by doing--个人感想 概要 阅读五篇博客后的感触 我的个人技能 个人经验的类比与总结 c语言学习情况 java学习目标及规划 公文写作能力 我的感触 仔细阅读了老师公众 ...

  6. 20155312张竞予 Exp1 PC平台逆向破解(5)M

    Exp1 PC平台逆向破解(5)M 目录 实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发get ...

  7. 20155312张竞予 20170510实践一:在IDEA中以TDD的方式对String类和Arrays类进行学习

    实践题目 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arrays类 sort binarySea ...

  8. 20155312 张竞予 Exp4 恶意代码分析

    Exp4 恶意代码分析 目录 基础问题回答 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. (2)如果 ...

  9. 20155312 张竞予 Exp7 网络欺诈防范

    Exp7 网络欺诈防范 目录 基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 (2)在日常生活工作中如何防范以上两攻击方法 实验总结与体会 实践过程记录 (1)简单应用SET工具建 ...

随机推荐

  1. Forms.WebBrowser与Controls.WebBrowser区别

    Forms.WebBrowser与Controls.WebBrowser区别 Forms.WebBrowser有ScrollBarsEnabled 属性,即窗口滚动条,可以设置为false即可: Co ...

  2. 顺时针打印矩阵(python)

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  3. 第四章 栈与队列(c5)栈应用:逆波兰表达式

  4. 第二章 向量(d2)有序向量:二分查找

  5. CentOS systemctl命令

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3  ...

  6. UVA-10054.The Necklace(欧拉回路)解题报告

    2019-02-09-21:55:23 原题链接 题目描述: 给定一串珠子的颜色对,每颗珠子的两端分别有颜色(用1 - 50 之间的数字表示,对每颗珠子的颜色无特殊要求),若两颗珠子的连接处为同种颜色 ...

  7. Codeforces Beta Round #75 (Div. 2 Only)

    Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...

  8. 并行网络爬虫(C++实现)

    step1 使用socket编程技术,利用http协议,抽取网页中的url,实现简单的爬虫. socket int socket (int domain, int type, int protocol ...

  9. StringBuffer 和 StringBuilder 类

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...

  10. Quartz代码及配置详解(转)

    Quartz可以用来做什么? Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年4月1日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的爱情动作片 ...