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。截图如下:
第十一章
问题4:如何知道自己设计的程序可能会出现哪些异常?
解决方案:目前只能通过查看API,上面标有throw的方法一定要处理异常,还有一种途径是通过学习书中知识慢慢积累经验。(还有其他方法吗?)
问题5:新建Tread时的参数可以有哪些?
解决方案:通过对课本的学习,可以是(线程群组名,“信息”),还可以是(线程群组名,Ranable),其他方式见API:
问题6:书中11.2.1中介绍Lock时,有这样一句话怎么理解?“ReentrantLock,如果已经有线程取得Lock对象锁定,尝试再次锁定同一个Lock对象是可以的”?
问题7:11.2.2中的FutureCallableDemo.java代码,在指定FutureTask时的作为参数传入的新建Callable匿名类中的
call()
是Callable自带的方法?书中是在覆盖call方法吗?解决方式:查看了API证明自己的猜想是正确的。call()方法是用来“计算结果”。截图如下:
问题8:上题中的代码,为什么可能抛出ExecutionException异常?
解决方法:查看API,"当试图获取已通过抛出异常而中止的任务的结果时,抛出此异常。"。
代码调试中的问题和解决过程
问题1:为什么运行第十章的 Download.java和Copy.java会显示“找不到符号IO”?截图如下:
解决方案:原因在于忘记编辑IO.java,编译后解决问题。注:也可以用javac -d bin *.java的方法,把它们一起编译了避免出现这类问题。
问题2:scheduleWithFixedDelay()参数及其含义?
解决方案:scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit),其中command是要处决的任务;initialDelay:延迟多久首次执行;delay:一次处决和下一次开始之间的时间延迟;unit:时间单元。API中截图如下:
代码托管
(本周花费大量时间看书上代码,预测代码结果,而没有把侧重点放在敲代码上)
上周考试错题总结
- 『错题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。
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
-
博客中值得学习的或问题:
- xxx
- xxx
- ...
-
代码中值得学习的或问题:
- xxx
- xxx
- ...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
点评过的同学博客和代码
其他(感悟、思考等,可选)
自我总结如下:
- 做题速度慢,对手机答题的模式还是不太适应,课堂测验还是大部分做不完。感觉自己学了书上的内容但很多不理解,所以这周把学习重点放在了教材理解上。
- 学习java的最终目的是实现自动化,即会编出质量高的程序解决需求。所以夯实基础的同时提高编程能力才是重中之重。
- 第六周老师说可以复制资源中的代码,所以敲代码的时间节省了很多,侧重点放在了代码结果预测和分析上。
- 经过前几周的学习,我发现博客知识记录学习过程的工具,学习知识才是我们真正的目标。而且既然花费时间去学习,就要学透学好,不然时间都是白白浪费了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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小时
改进情况:这周看了老师提供的学习视频,通过视频中第十章的三节课和第十一章的前两节课的讲解,我对教材内容的理清情况比之前有了提高。