20155215 2016-2017-2 《Java程序设计》第7周学习总结
20155215 2016-2017-2 《Java程序设计》第7周学习总结
教材学习内容总结
第十二章
-
lambda语法:Lambda去重复,回忆DRY原则,Lambda表达式可读性更好
-
Arrays.sort
- Comparator: 对比C语言中使用函数指针
- 匿名类与多态
-
在Java中引入Lambda的同时,与现有API维持兼容性是主要考虑之一。
-
方法引用(Method Reference) 一条语句用Lambda表达式,多条语句用方法引用
-
函数接口(Functional Interface)
- 就是只有一个抽象方法的接口:Runnable、Callable、Comparator
- @FunctionalInterface
- 可引用的包括类的静态方法、成员方法、构造方法
-
接口默认方法(Default Method):不能使用类的成员变量
-
使用Optional代替null
-
标准API的函数接口
- Consumer:一个参数,无返回值
- Function:一个参数,有返回值
- Predicate:一个参数,有返回值,返回值- 必须是boolean类型的
- Supplier:无参数,有返回值
-
Stream与管道
-
Lambda与并行处理
第十三章
- 时间的度量,年历简介。
- 想要取得系统时间,方法之一是使用System.currentTimeMillis()方法,返回的是long类型整数。
P429
import java.util.*;
import static java.lang.System.*;
public class datedemo {
public static void main(String[] args) {
Date date1 = new Date(currentTimeMillis());
Date date2 = new Date();
out.println(date1.getTime());
out.println(date2.getTime());
}
}
运行结果
- 有关字符串时间格式的处理,职责落在了Java.text.DateFormat身上。
import java.util.*;
import static java.lang.System.out;
import static java.text.DateFormat.*;
public class DateFormatDemo {
public static void main(String[] args) {
Date date = new Date();
dateInstanceDemo(date);
timeInstanceDemo(date);
dateTimeInstanceDemo(date);
}
static void dateInstanceDemo(Date date) {
out.println("getDateInstance() demo");
out.printf("\tSHORT: %s%n", getDateInstance(LONG).format(date));
out.printf("\tSHORT: %s%n", getDateInstance(SHORT).format(date));
}
static void timeInstanceDemo(Date date) {
out.println("getTimeInstance() demo");
out.printf("\tLONG: %s%n", getTimeInstance(LONG).format(date));
out.printf("\tMEDIUM: %s%n", getTimeInstance(MEDIUM).format(date));
out.printf("\tSHORT: %s%n",getTimeInstance(SHORT).format(date));
}
static void dateTimeInstanceDemo(Date date) {
out.println("getDateTimeInstance() demo");
out.printf("\tLONG: %s%n",
getDateTimeInstance(LONG, LONG).format(date));
out.printf("\tMEDIUM: %s%n",
getDateTimeInstance(SHORT, MEDIUM).format(date));
out.printf("\tSHORT: %s%n",
getDateTimeInstance(SHORT, SHORT).format(date));
}
}
运行截图
- 处理时间日期的Calendar
- 使用Java.util.TimeZone的getDefault()来取得默认时区信息。取得指定时区的TimeZone实例,可以取得ID字符串。
- 机器时间观念的API和人类时间观念的API
- 对时间的运算。
教材学习中的问题和解决过程
第十二章
- 问题1:Lambda语法的优势在哪里?
- 问题1解决方案:取得语法的简洁,增加代码程序的表达性,引入更简单的表达式和局部变量的定义规则,定义更灵活更友善的语法,这里只是回避,类加载和实例化本身不可避免,允许用户使用最终有效的局部变量。
第十三章
- 问题2:Java8与以前相比在时间处理上做了哪些改进?
- 问题2解决方案:Java 的日期与时间 API 问题由来已久,Java 8 之前的版本中关于时间、日期及其他时间日期格式化类由于线程安全、重量级、序列化成本高等问题而饱受批评。Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。新的 java.time 中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了了日期时间和本地化的管理。
代码调试中的问题和解决过程
-
问题1:我在运行第十三章的程序时出现了编译错误:
-
问题1解决方案:我在网上找到了这个,Java命令行编译文件时出现的错误,找不到符号或软件包不存在等
-
问题2:在编译Timezone程序时报错如下:
-
问题2解决方案:我发现我文件名打错了,然后还有一个地方多打了一行重复的内容,修改之后就编译成功了。运行结果如下:
代码托管
上周考试错题总结
- 1.下面哪条命令可以把 f1.txt 复制为 f2.txt ?:
A. cp f1.txt f2.txt
B .
copy f1.txt f2.txt
C .
cat f1.txt > f2.tx
D .
cp f1.txt | f2.tx
E .
copy f1.txt | f2.tx
答案:AC
我只选择了A。copy是Windows下的命令。cat f1.txt > f2.tx 通过输出重定向实现了复制。
- 7.调用线程的interrupt()方法 ,会抛出()异常对象?
A .
IOException
B .
IllegalStateException
C .
RuntimeException
D .
InterruptedException
E .
SecurityException
答案:DE
我只选择了D,SecurityException检测到安全错误时引发的异常。
-
10.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, 下面哪些选项可以创建一个并行流?
A .
new ParallelStream(s)
B .
c.parallel()
C .
s.parallelStream()
D .
c.parallelStream()
E .
new ParallelStream(c)
F .
s.parallel()
答案:DF
我选了AB -
Which of the following statements about the Callable call() and Runnable run() methods are correct? (Choose all that apply.)
A .
Both can throw unchecked exceptions.
B .
Callable takes a generic method argument.
C .
Callable can throw a checked exception.
D .
Both can be implemented with lambda expressions.
E .
Runnable returns a generic type.
F .
Callable returns a generic type.
G .
Both methods return void
答案:ACDF
我的答案是CF,显然我对题目的理解不够,还需要更深入地学习 -
14.Which of the following are not java.io classes? (Choose all that apply.)
答案是PrintWriter
因为PrintWriter是唯一Writer类,没有互补reader类,E是正确的。 -
Which of the following are built-in streams in Java? (Choose all that apply.)
A .System.err
B .System.error
C .System.in
D .System.input
E .System.out
F .System.output
答案:ACE
The System class has three streams: in is for input, err is for error, and out is for output. Therefore A, C, and E are correct. The others do not exist.
结对及互评
评分标准
-
正确使用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
点评过的同学博客和代码
其他(感悟、思考等,可选)
这周的学习状态感觉比之前要好一些,另一方面这周的学习内容也相对简单一些。然后这周的测试,我只有九分,虽然这九分还排了个第六名,但是我知道我还要很多的不足需要努力,希望我能再接再励继续进步。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第四周 | 300/500 | 2/4 | 18/38 | |
第五周 | 515/1396 | 3/7 | 22/30 | |
第六周 | 845/2012 | 1/9 | 24/30 | |
第七周 | 734/2746 | 2/11 | 27/28 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:28小时
-
实际学习时间:27小时
-
改进情况:这周的学习状态感觉比之前要好一些,花的时间更长了一些。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)