教材学习内容总结

第十二章

认识Lambda语法

  • 在只有Lambda表达式的情况下,参数的类型必须写出来。

  • 匿名类有相应的应用场合。Lambda表达式只关心方法命名上的参数与返回定义,忽略方法名称。

  • JDK8对interface语法做了演讲,允许有默认方法操作。

Functional与Stream API

*使用Optional代替null

  • 调用方法时如果返回类型是Optional,应该立即想到他可能包含也不包涵值。
    标准API的函数接口

  • Consumer:一个参数,无返回值

  • Function:一个参数,有返回值

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

  • Supplier:无参数,有返回值

  • JDK8引入了StreamAPI,引入了管道操作风格。

*一个管道包括:来源、零或多个中间操作、一个最终操作。

第十三章

时间的度量

  • 格林威治标准时间

  • 世界时

  • 国际原子时

  • 世界协调时间

  • Unix 时间

  • epoch

  • GMT(Greenwich Mean Time)时间:现在不是标准时间

  • 世界时(Universal Time,UT):1972年UTC出来之前,UT等价于GMT

  • 国际原子时(TAI):秒的定义

  • 世界协调时间(Corrdinated Universal Time, UTC): 闰秒

  • Unix时间: 1970.1.1 00:00:00开始的秒数

  • epoch: java.util.Date epoch毫秒数

年历与时区

  • 儒略历,现公历的前身

  • 格里高利厉,

  • ISO 8601标准,并非年历系统,而是时间日期表示方法的标准,用以统一时间日期的数据交换格式。

  • 时区涉及地理、法律、经济,社会甚至政治问题。例如日光节约时间在许多高纬度国家实施。

Date与Calendar

  • Date只用来获取epoch毫秒数

  • DateFormat来格式化成人类理解的年月日时分秒

  • 取得系统时间,方法之一是使用System.currentTimeMilles()方法,返回值是long类型整数。

  • JDK8新时间日期处理API中最重要的,就是将机器时间的概念与人类时间概念区隔开来。

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

  • 问题1:机器时间观点的API与人类时间观点的API的区别。(日光节约时间是混淆机器与人类时间观点会引发的问题之一)

  • 问题1解决方案:

  • 机器API新时间日期处理的主要套件是java.time,对于机器的相关概念,设置了Instant类,精确度基本是毫秒。JDK8新时间日期处理API清楚地将机器与人类时间概念划分开来。

  • 人类在实践概念的表达大多数是笼统的,片段的信息。

  • 问题2:标准API几个函数接口的异同。

  • 问题2解决方案:

     * Consumer函数接口,是接受了自变量,然后处理后不返回值。
     * Function函数接口,是接受了自变量,进行计算后返回结构。
     * Predicate函数接口,是接受了自变量,,然后只返回boolean值,也就是根据传入的自变量直接论断真假的行为。
     * Supplier函数接口,是不接受任何自变量,然后返回值。
    
  • ...

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

  • 问题1:编译过程中出现乱码
  • 问题1解决方案:可能是编写过程中字符编码出现错误

代码托管

上周考试错题总结

调用线程的interrupt()方法,会抛出InterruptedException SecurityException异常对象。

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"?

for (Object o : list)

Which of the following statements about the Callable call() and Runnable run() methods are correct? (Choose all that apply.)

  • Both can throw unchecked exceptions.
  • Callable can throw a checked exception.
  • Both can be implemented with lambda expressions.
  • Callable returns a generic type.
 1. class Calc {
 2.  public static void main(String [] args) {
 3.    try {
 4.         int x = Integer.parselnt ("42a") ;
 5.     //insert code here
 6.         System.out.print ("oops");
 7.    }
 8.   }
 9. }

下面哪行分别插入到第五行,会导致输 "oops" ?

catch (IllegalArgumentException e) {

} catch (NumbelFormatException n) {

Given an instance of a Stream, s, and a Collection, c, which are valid ways of creating a parallel stream? (Choose all that apply.)
给定一个Stream的实例s, 一个Collection的实例c, 下面哪些选项可以创建一个并行流?

 * ```c.parallelStream()```
 * ```s.parallel() ```

What are some reasons to use a character stream, such as Reader/Writer, over a byte stream, such as InputStream/OutputStream?

* More convenient code syntax when working with String data
* Automatic character encoding
private void echo() throws IOException {
    try (FileReader fileReader = new FileReader("zoo-data.txt");
        BufferedReader bufferedReader = new BufferedReader(fileReader)) {
        System.out.println(bufferedReader.readLine());
    }
 }

Assuming zoo-data.txt is a multiline text file, what is true of the following method?

It prints the first line of the file to the console

Which of the following are not java.io classes?

* PrintReader

Assuming / is the root directory, which of the following are true statements?

* /home/parrot is an absolute path
String line;
Console c = System.console();
Writer w = c.writer();
if ((line = c.readLine()) != null)
    w.append(line);
w.flush();

What is the result of executing the following code?

The code prints what was entered by the user

A NullPointerException might be thrown

An IOException might be thrown

Which of the following are true?

  • Console is obtained using the singleton pattern.
  • When getting a Console object, it might be null.
InputStream is = new BufferedInputStream(new FileInputStream("zoo.txt"));
InputStream wrapper = new _____(is);

Which classes will allow the following to compile?

```BufferedInputStream```

```ObjectInputStream```

Which of the following are built-in streams in Java?

  • System.err
  • System.in
  • System.out

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 20155216

    • 结对照片

    • 结对学习内容

      • 1、通过课本内容学习Lambda表达式语法。
      • 2、了解Stream API的使用。
      • 3、学习Date与Calendar以及JDK新的时间日期API。
  • 上周博客互评情况

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

  • 在老师的启发之下,改变了自己Java学习的方式,以往是零散式的,集中一两天的学习方法。现在能在每天学习不同的学习任务,一周之内合理的分配时间学习Java。

  • 每天敲打书上的代码,的确能学到许多知识,也逐渐学会了Java的调试,但还是缺乏自己的动手和实际操作能力。

  • 平时遇见问题能先自己尝试寻找资源来学习,解决不了再询问老师和同学。

  • 学习了Lambda表达式语法,了解了Functional与Stream API,认识了Date与Calendar。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/4 8/12
第二周 70/80 1/5 16/28
第三周 120/200 1/6 12/40
第四周 300/500 1/7 20/60
第五周 500/1000 1/8 15/75
第六周 600/1600 1/9 15/90
第七周 400/2000 2/11 20/110 对Lambds语法,时间与日期有了一定了解

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

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

  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:对于java学习的时间,有了系统性的规划,并不是向以前零散或者突击性的学习。

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

参考资料