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

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

课堂笔记

  • 学习进程
    • 周一看视频-2h
    • 周二以代码为中心看书-3h
    • 课后选择题-5h
    • 教材指导
  • 应试
    • Linux命令(1~2)
    • 前面的内容(3~5)
    • 本堂内容(20)
  • System.out,println(stu); =System.out.println(stu.toString);注意覆盖toString
    • 重载:函数名相同,参数不同。注意子类继承父类后,声明了与父类函数名相同内容不同的函数,也是重载。
    • 覆盖:子类与父类的函数声明++完全相同++,子类把父类覆盖。
  • 比较对象时要覆盖equals
  • collectionAPI:数据结构
  • collecton:很多对象的集合。
  • time java Test显示程序执行时间。
  • List:查看API:“Interface List”:List是接口,不能new List
    • 超级接口collection:方法toArray() :返回一个包含所有元素的数组。size() ,remove(Object o) ,hashCode() :返回一个哈希值。equals(Object o) ,contains(Object o) :看collection中是否有某个元素。clear() ,add(E e)。
    • 已知实现类: ArrayList, LinkedList...
  • 缓冲区溢出——栈溢出。
  • 泛型:代表各种类型,避免了重载时只是参数类型不同算法相同的问题。C语言中:空指针void *

教材学习内容总结

我都把笔记记书上了。感觉写在博客里对自己学习没什么帮助。

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

第十章

  • 问题一:书10.1.1中最后一个代码片段,实现将文档输出至浏览器,取得来源文档的这句代码是什么意思?```InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/jdbc.pdf");
  • 解决过程:查看了API发现没有getServletContext()方法,这应该是自己定义的取得某个资源或者内容的方法,其中还定义了一个getResourceAsStream()方法。
  • 问题2::10.1.3中介绍DataInputStream与DataOutputStream时举例用的Member.java代码中的public void save()方法是怎么通过一个number成员,打开被写入的文件?public static Member load(number)方法是怎么通过number成员打开源文件?
  • 解决过程:思考了良久,没有解决。
  • 问题3:10.2.2中的ChartUnit.java代码中最后一行System.getProPerty("file.encoding")是在做什么?getProPerty方法的具体用法是什么?
  • 解决过程:查看了getProPerty的API,调用System.getProperties()可以返回一个Properties类的对象。 这个类就是一个hashtable,你可以把系统的所有属性打印出来,包括它的key和value。截图如下:

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

第十一章

  • 问题4:如何知道自己设计的程序可能会出现哪些异常?

  • 解决方案:目前只能通过查看API,上面标有throw的方法一定要处理异常,还有一种途径是通过学习书中知识慢慢积累经验。(还有其他方法吗?)

  • 问题5:新建Tread时的参数可以有哪些?

  • 解决方案:通过对课本的学习,可以是(线程群组名,“信息”),还可以是(线程群组名,Ranable),其他方式见API:

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

  • 问题6:书中11.2.1中介绍Lock时,有这样一句话怎么理解?“ReentrantLock,如果已经有线程取得Lock对象锁定,尝试再次锁定同一个Lock对象是可以的”?

  • 问题7:11.2.2中的FutureCallableDemo.java代码,在指定FutureTask时的作为参数传入的新建Callable匿名类中的call()是Callable自带的方法?书中是在覆盖call方法吗?

  • 解决方式:查看了API证明自己的猜想是正确的。call()方法是用来“计算结果”。截图如下:

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

  • 问题8:上题中的代码,为什么可能抛出ExecutionException异常?

  • 解决方法:查看API,"当试图获取已通过抛出异常而中止的任务的结果时,抛出此异常。"。

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

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

  • 问题1:为什么运行第十章的 Download.java和Copy.java会显示“找不到符号IO”?截图如下:

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

  • 解决方案:原因在于忘记编辑IO.java,编译后解决问题。注:也可以用javac -d bin *.java的方法,把它们一起编译了避免出现这类问题。

  • 问题2:scheduleWithFixedDelay()参数及其含义?

  • 解决方案:scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit),其中command是要处决的任务;initialDelay:延迟多久首次执行;delay:一次处决和下一次开始之间的时间延迟;unit:时间单元。API中截图如下:

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

代码托管

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

(本周花费大量时间看书上代码,预测代码结果,而没有把侧重点放在敲代码上)

上周考试错题总结

  • 『错题1』:输入"cd"命令并按回车键后,将会出现什么情况?——D .

    从当前目录切换到用户主目录
    • 「原因」:不清楚根目录和主目录的区别。
    • 「理解情况」:已理解,~是主目录,打开终端。
  • 『错题2』:现有:
 1. import java.util.*;    
2.    
3. Class FindStuff  {    
4. public static void main (String[]args)    {    
5.    //insert code here    
6.    c.put ("X", 123);    
7.    }    
8.  }

分别插入到第5行,哪几行允许代码编译?

A. Map c= new SortedMap();

B.HashMap c= new HashMap(); C.HashMap c= new Hashtable(); D.SortedMap c= new TreeMap(); E.ArrayList c= new ArrayList(); F.Map c = new LinkedHashMap();

  • 「原因」:对Map学习不到位,不了解几种Map的继承关系。
  • 「理解情况」:查看了几种Map的API,截图如下:
    • TreeMap和HashMap都是java.util.AbstractMap的子类,属于并列关系;
    • LinkedHashMap是HashMap的子类;
    • Hashtable是java.util.Directionary的子类,与其他的Map没有继承关系;
    • SortedMap是继承了Map方法的子方法;截图如下:
    • 扩展:几种Map之间的区别:
      • Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,取得数据的顺序是++完全随机++的。
      • Hashtable与HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空。
      • LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,++先得到的记录肯定是先插入的++。
      • TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序
    • 几种Map的应用场合:
      • HashCode:在Map中插入、删除和定位元素。
      • TreeMap:按自然顺序或自定义顺序遍历键。
      • LinkedHashMap:需要输出的顺序和输入的相同
  • 『错题3』:

结对及互评

这周我对搭档的帮助主要是帮她在周三的练习题中分析代码,一起修正代码。同时督促对方学习java。

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

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

  • 参考示例

点评过的同学博客和代码

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

自我总结如下:

  1. 做题速度慢,对手机答题的模式还是不太适应,课堂测验还是大部分做不完。感觉自己学了书上的内容但很多不理解,所以这周把学习重点放在了教材理解上。
  2. 学习java的最终目的是实现自动化,即会编出质量高的程序解决需求。所以夯实基础的同时提高编程能力才是重中之重。
  3. 第六周老师说可以复制资源中的代码,所以敲代码的时间节省了很多,侧重点放在了代码结果预测和分析上。
  4. 经过前几周的学习,我发现博客知识记录学习过程的工具,学习知识才是我们真正的目标。而且既然花费时间去学习,就要学透学好,不然时间都是白白浪费了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 大部分自己补全的代码片段不会出现问题,渐渐具备脱离书本编代码的能力
第五周 627/1987 1/7 20/158 能够帮助其他同学发现代码出错的原因
第六周 400/2614 1/8 24/178 能够整理出教材中各种类、接口、方法之间的相互关系,理清知识脉络

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:25小时

  • 实际学习时间:24小时

  • 改进情况:这周看了老师提供的学习视频,通过视频中第十章的三节课和第十一章的前两节课的讲解,我对教材内容的理清情况比之前有了提高。

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

参考资料

上一篇:阻塞IO,非阻塞IO,IO多路复用模型


下一篇:django之ORM补充