20155216 2016-2017-2 《Java程序设计》第七周学习总结
20155216 2016-2017-2 《Java程序设计》第七周学习总结
教材学习内容总结
认识Lambda表达式语法
Lambda表达式不需要也不允许使用throws关键字来声明可能产生并需要向上抛出的异常。
Lambda为的就是表示一种行为,趋向于纯函数,因此一般情况下是不需要使用标识加以区分的。
Lambda不从父类型中继承任何名字,包括:
接口的静态final字段
接口的静态嵌套类
默认方法
Lambda参数与表达式体中的局部声明可以屏蔽字段名。
Lambda中的this和super的含义完全同外部一致。
了解方法引用
1、强引用
当我们使用new 这个关键字创建对象时被创建的对象就是强引用,如Object object = new Object() 这个Object()就是一个强引用了,如果一个对象具有强引用。垃圾回收器就不会去回收有强引用的对象。如当jvm内存不足时,具备强引用的对象,虚拟机宁可会报内存空间不足的异常来终止程序,也不会靠垃圾回收器去回收该对象来解决内存。
2、软引用
如果一个对象具备软引用,如果内存空间足够,那么垃圾回收器就不会回收它,如果内存空间不足了,就会回收该对象。当然没有被回收之前,该对象依然可以被程序调用。
3、弱引用
如果一个对象只具有弱引用,只要垃圾回收器在自己的内存空间中线程检测到了,就会立即被回收,对应内存也会被释放掉。相比软引用弱引用的生命周期要比软引用短很多。不过,如果垃圾回收器是一个优先级很低的线程,也不一定会很快就会释放掉软引用的内存。
4、虚引用
如果一个对象只具有虚引用,那么它就和没有任何引用一样,随时会被jvm当作垃圾进行回收。
Stream API
stream()方法用于把一个集合变成Stream,然后,通过filter()、map()等实现Stream的变换。Stream还有一个forEach()来完成每个元素的迭代。
当使用stream的时候,需要关注3个阶段:
1.创建一个stream
2.指定的中间操作将初始stream转化为其他stream
3.最终的操作会产生一个结果,在调用最终操作前都会延迟执行的。在这之后,stream不会再被使用。
Date与Calendar
1、使用Date类代表当前系统时
Date d = new Date();
System.out.println(d);
使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象,显示的结果如下:
Sun Mar 08 16:35:58 CST 2009
在该格式中,Sun代表Sunday(周日),Mar代表March(三月),08代表8号,CST代表China Standard Time(中国标准时间,也就是北京时间(东八区))。
2、使用Date类代表指定的时间
Date d1 = new Date(2009-1900,3-1,9);
System.out.println(d1);
使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。例如上面的示例代码代表就是2009年3月9号。
实际代表具体的年月日时分秒的日期对象,和这个类似。
教材学习中的问题和解决过程
-
问题1:
stream与集合很相似,其中有什么不同。 -
问题1解决方案:
stream与集合的不同点:
1.stream不存储集合元素
2.stream操作不修改源数据,他们是返回一个新的streams来承载结果
3.stream操作都会尽可能的进行延迟加载。这意味着当需要使用结果的时候它才会才运行。 -
问题2:
对于Years\Month\Date等设置使用不够明确 -
问题2解决方案:
year - 用于设置 YEAR 时间域的值。
month - 用于设置 MONTyear - 用于设置 YEAR 时间域的值。
month - 用于设置 MONTH 时间域的值。 Month 值以 0 开始。 例如,0 代表一月。
date - 用于设置 DATE 时间域的值。
hour - 用于设置 HOUR 时间域的值。
minute - 用于设置 MINUTE 时间域的值。
second - 用于设置 SECOND 时间域的值。 H 时间域的值。 Month 值以 0 开始。 例如,0 代表一月。
date - 用于设置 DATE 时间域的值。
代码调试中的问题和解决过程
-
问题1:
-
问题1解决方案:
未解决 -
问题2:
-
问题2解决方案:
未解决
代码托管
上周考试错题总结
- 错题1及原因,理解情况
下面代码中共有()个线程?
public class ThreadTest {
public static void main(String args[]){
MyThread myThread =new MyThread();
Thread t1=new Thread(myThread);
Thread t2=new Thread(myThread);
t1.start();
t2.start();
}
}
class MyThread extends Thread {
...
}
共有3个线程,主线程算其中一个。
-
错题2及原因,理解情况
调用线程的interrupt()方法 ,会抛出InterruptedException、SecurityException异常对象。 -
错题3及原因,理解情况
What is the result of executing the following code? (Choose all that apply.)
String line;
Console c = System.console();
Writer w = c.writer();
if ((line = c.readLine()) != null)
w.append(line);
w.flush();
The code prints what was entered by the user.
A NullPointerException might be thrown.
An IOException might be thrown.
结对及互评
评分标准
-
正确使用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
点评过的同学博客和代码
-
本周结对学习情况
- 20155238
- 结对学习内容
- 1、通过课本内容学习Lambda表达式语法。
- 2、了解Stream API的使用。
- 3、学习Date与Calendar以及JDK新的时间日期API。
-
上周博客互评情况
其他(感悟、思考等,可选)
1、了解了java编写关于日期与时间程序的方便性。
2、了解了java方法的引用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/4 | 20/20 | |
第二周 | 334/340 | 1/5 | 18/38 | |
第三周 | 570/900 | 1/6 | 22/60 | |
第四周 | 544/1358 | 1/7 | 30/90 | |
第五周 | 731/2089 | 1/8 | 30/90 | 了解了java中的架构,排序,以及异常处理 |
第七周 | 541/3558 | 1/9 | 30/90 | 了解了JDK8新的时间日期API |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:25小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)