20155233 2016-2017-2 《Java程序设计》第7周学习总结

20155233 2016-2017-2 《Java程序设计》第7周学习总结

学习目标

  • 了解Lambda语法
  • 了解方法引用
  • 了解Fucntional与Stream API
  • 掌握Date与Calendar的应用
  • 会使用JDK8新的时间API

教材学习内容总结

本周主要进行第十二章和第十三章的学习。

  • Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数。

  • 在只有Lambda表达式的情况下,参数的类型必须写出来,如果有目标类型的话,在编译程序可推断出类型的情况下,就可以不写出Lambda表达式的参数类型。

  • Lambda表达式本身是中性的,不代表任何类型的实例,可用来表示不同目标类型的对象操作。

  • Lambda表达式在平行设计的时候,能够进行并行处理。

<1>使用Stream进行管道操作:

  • 绝大多数的Stream并不需要呼叫close()方法,JDK8中要close()的是Files.lines()、Files.list()与Files.walk()方法。

  • 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间。

  • 在1972年引入UTC之前,GMT与UT是相同的。

  • 世界协调时间(UTC),UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

  • 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字符串描述),实际上谈到时间指的是UTC时间。

  • 儒略历:修正了罗马历隔三年设置一闰年的错误,改采四年一闰。

  • 格里高利历:改革了儒略历。

  • ISO 8601标准:采用统一的数据格式。

  • 每个地区的标准时间各不相同,涉及到地理、法律、经济、社会、政治等问题。

  • 考虑了UTC偏移的时间表示上,通常会标识Z符号。

  • 有些高纬度国家,夏季、冬季日照时间差异很大,实施日光节约时间。

  • Date:取得系统时间,方法之一就是使用System.currentTimeMillis()方法,返回long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。

  • 新时间日期处理API的主要套件命名为java.time。对于机器相关的时间概念,设计了Instant类,用以代表自定义的Java epoch之后的某个时间点经历的毫秒数,精确度基本上是毫秒,但可添加柰秒精度的修正数值。

  • 人类时间观点API,LocalDateTime(包括日期与时间)、LocalDate(只有日期)、LocalTime(只有时间),如果需要时区,可以基于LocalDateTime、LocalDate、LocalTime等来补充。

  • 机器时间观点的API。

  • 字串时间格式的处理,职责落到了java.text.DateFormat身上,其操作类别java.text.SimpleDateFormat,可以直接建构SimpleDateFormat实例,或使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance()等静态方法。

  • 直接构建SimpleDateFormat的好处是,可使用模式字符串自定义格式。

  • LocalDateTime包括日期与时间;LocalDate只有日期,如果设定不存在的日期会抛出DateTimeException;LocalTime只有时间。若需要时区信息,可基于上述三个时间描述的ZoneDateTime和OffsetDateTIme。

  • 想要取得系统时间,方法之一是使用System.currentTimeMillis()方法

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

<1>标准API的函数接口

  • Consumer:一个参数,无返回值
  • Function:一个参数,有返回值
  • Predicate:一个参数,有返回值,返回值必须是boolean类型的
  • Supplier:无参数,有返回值

<2>Calendar: 时间的运算

  • getInstance(): GregorianCalendar
  • getTime()
  • get()
  • add()
  • roll()
  • after()
  • before()

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

<1>对象间的:

Java.util.Date date1 = new java.util.Date();
java.util.Date date2 = date1;

表示date1 与date2指向相同的对象,指向相同的存储空间。
<2>课本P435提到了clone()的使用方式?

java.util.Date date1 = new java.util.Date();
java.util.Date date2 = (java.util.Date)date1.clone;

date1 与date2指向不相同的对象,但数据是相同的,就像是两个衣着相同的不同的人.

代码托管

(statistics.sh脚本的运行结果截图)
1071472-20170409200041925-1453887941.png

上周考试错题总结

  • 下面代码中共有(C)个线程?
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 {
    ...
}:

A.1 B.2 C.3 D.4

  • 现有:
3.  import java.util.*;
4.    class ForInTest  {
5.static List list=new ArrayList();
6.
7.public static void main (String  []  args)  {
8.list. add("a"); list. add("b");list. add( "c");
9.    //insert code here
10.    System.out.print (o);
11.    }
12.  }

哪一行插入到第9行将导致输出“abc"?: (D)
A . for (Iterator o : list.iterator(); o.hasNext (); )
B . for (Iterator o : list)
C . for (Object o : list.iterator())
D . for (Object o : list)

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

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

本周内容较多,通过练习实际操作中的代码编写过程,发现很多东西在书上学不到,以后更应该增强实际应用。实验的联系加深了我对之前知识的掌握。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行20篇200小时
第一周8/101/48/10编写第一个Java程序HelloWorld
第二周79/891/511/21学习Java基础语法
第三周249/3381/616/37学习Java关于对象的重要知识
第四周331/6691/717/54学习Java关于继承、接口与多态的重要知识
第五周507/11761/818/72学习Java的异常处理、Collection与Map
第六周1321/24971/916/88学习Java的输入、输出与线性、并行API
第七周678/31752/1118/106学习Java的Lambda、时间与日期

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:20小时

  • 实际学习时间:18小时

  • 改进情况:学习时间比上周多,主要花费时间去使用,复习知识。

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

参考资料

转载于:https://www.cnblogs.com/l20155233/p/6686129.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值