20145208 《Java程序设计》第7周学习总结
2016-04-17 13:28
447 查看
20145208 《Java程序设计》第7周学习总结
教材学习内容总结
Lambda
认识Lambda语法
什么是Lambda语法以下是维基百科上的解释:
a function (or a subroutine) defined, and possibly called, without being bound to an identifier。
翻译过来就是:一个不用被绑定到一个标识符上,并且可能被调用的函数。更简单的理解就是一段带有输入参数的可执行语句块。
Lambda去可以重复,符合DRY原则,而且Lambda表达式可读性更好,操作更简单。
方法引用(Method Reference)
一条语句用Lambda表达式,多条语句用方法引用
函数接口(Functional Interface)
就是只有一个抽象方法的接口
Runnable
Callable
Comparator
……
可引用的包括类的静态方法、成员方法、构造方法
Functional与Stream API
使用Optional代替null标准API的函数接口
Consumer:一个参数,无返回值
Function:一个参数,有返回值
Predicate:一个参数,有返回值,返回值必须是boolean类型的
Supplier:无参数,有返回值
Stream与管道
时间与日期
认识时间与日期
时间的度量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毫秒数
认识Date与Calendar
Date与DateFormatDate只用来获取epoch毫秒数
DateFormat来格式化成人类理解的年月日时分秒
Calendar: 时间的运算
getInstance(): 用来取得Calendar实例
getTime():取得Date实例
get():指定取得实例上的字段枚举常数
add():改变实例的时间
roll():只针对日期中某个字段加减
after():比较两个实例的日期先后
before():同上
...
JDK8新时间日期API
人类时间(ISO8601 标准)LocalDateTime:包括日期与时间
LocalDate:只有日期
LocalTime:只有时间
ZonedDateTime:时区的日期与时间
OffsetdateTime:代表UTC偏移量
Year:表示年
YearMonth:表示年月
Month:表示月
MonthDay:表示月日
教材学习中的问题和解决过程
问题一
p384 LambdaDemo.java: Lambda
修改代码,实现逆序排序修改代码如下,只需要将sort中的排序方式改变一下就可以了:
public class LamabdaDemo2 { public static void main(String[] args) { String[] names={"Justin","caterpillar","Bush"}; Arrays.sort(names,(name1, name2)->name2.length()-name1.length()); System.out.println(Arrays.toString(names)); } }
运行结果:
问题二
p393 MethodReferenceDemo.java: 方法引用
如何运行这个程序?运行结果?原代码运行结果是空白的,如下:
这是因为
asList(args)里面上面的没有,所以要想有运行结果需要修改
args,比如我想让它输出我的学号姓名,就可以将代码段改成如下代码:
List<String> names=Arrays.asList("20145208蔡野"); List<Person> persons=map(names,Person::new); persons.forEach(out::println);
运行结果如下:
当然,我们还可以让它出错多个输出,修改代码段如下:
List<String> names=Arrays.asList("20145208蔡野","20145208caiye"); List<Person> persons=map(names,Person::new); persons.forEach(out::println);
运行结果如下:
问题三
p398 CustomerDemo.java: 默认方法
加几个一下main中的Customer的对象,让firstName,lastName,zipCode都有相同的和不同的增加对象只需要在代码段
List<Customer>customers=Arrays.asList();中添加新的内容就可以了:
List<Customer>customers=Arrays.asList( new Customer("Justin","Lin",804), new Customer("Monica","Huang",804), new Customer("Irene","Lin",804), new Customer("Justin","Xin",804), new Customer("Yeeeee","Lin",604), new Customer("Justin","Zhang",604) );
问题四
p429 DateDemo.java: Date类测试
System.currentTimeMillis()的结果与这个例子有联系吗?测试一下测试结果如下:
可以发现测试结果和例子无关,和计算机内的时间有关,输出的结果是递增的。
问题五
p430 DateFormatDemo.java: DateFormat类
发现代码中有什么问题了吗?我觉得原代码有问题,输出不合理:
图中的时间格式与书上不同,于是我修改了代码顺便加上了内容:
代码段:
static void dateInstanceDemo(Date date){ out.println("getDateInstance() demo"); out.printf("\tLONG: %s%n",getDateInstance(LONG).format(date)); out.printf("\tMEDIUM: %s%n",getDateInstance(MEDIUM).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("getDateInstance() demo"); out.printf("\tLONG: %s%n",getDateTimeInstance(LONG,LONG).format(date)); out.printf("\tMEDIUM: %s%n",getDateTimeInstance(MEDIUM,MEDIUM).format(date)); out.printf("\tSHORT: %s%n",getDateTimeInstance(SHORT,SHORT).format(date)); }
输出结果如下:
问题六
p436 TimeZoneDemo.java TimeZoneDemo2.java: TimeZone的测试
修改代码获取和设置大陆的时区信息修改代码段
TimeZone beijingTz=TimeZone.getTimeZone();来修改时区,修改的时候发现输入
("Asia/Beijing")的时候居然不能识别:
这是资本主义的恶意么………囧…………
我试着修改成中国第二大诚实上海……居然显示的中国标准时间:
这是……怎么了……好尴尬哦 看来歪果仁更喜欢上海??
代码调试中的问题和解决过程
问题一
p442 HowOld2.java:
如何计算一个程序的运行时间:一开始我尝试着用
Period的方法来计算,但是运行结果不对:
通过API我了解到Period方法最小值是天,我要计算的是很小的单位,于是我想到了之前学的DateDemo的方法,于是我用了如下方法:
Date begin = new Date(); ...Java Code... Date end = new Date(); long duration = end.getTime() - begin.getTime();
运行结果:
其他(感悟、思考等)
本周的学习内容让我了解到了Lambda语法,还有时间和日期的应用,在学习的过程中,我发很大代码已经可以在敲出来之前看懂,很多代码中的问题通过API都能够解决,对于java的学习也越来越渐入佳境,每次实验的时候也觉得很有乐趣,经过几次自己设计代码之后觉得设计代码也是一件很有趣的事情,而且,测试别人的代码远远没有测试自己的代码有乐趣。希望在未来半个学期的学习中,我可以把 java学的越来越好,学好java掌握的不仅仅是一种计算机编程语言,也是种思维上的开拓。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | 成为超过高级初学者的存在 |
第一周 | 150/150 | 1/3 | 15/15 | 第一个JAVA程序 |
第二周 | 150/300 | 2/5 | 20/35 | 第一次对教材代码进行自己的修改 |
第三周 | 400/700 | 2/7 | 20/50 | 熟练的进行代码托管 |
第四周 | 1210/1910 | 2/9 | 30/80 | 在敲代码的时候有自己思考 |
第五周 | 1083/2993 | 1/10 | 40/120 | 学习API |
第六周 | 1061/4054 | 2/12 | 50/170 | 了解到了输入输出与线程 |
第七周 | 579/4633 | 2/14 | 40/210 | 学会了测试代码 |
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
我的代码托管
相关文章推荐
- Spring初探----Bean的装配
- JAVA设计模式概述
- 关于struts2 与Ajax整合的版本问题之模型驱动,属性驱动
- Java中Synchronized的用法
- struts2项目插入中文到mysql数据库乱码的解决方法
- Java生成六位验证码(发短信验证)
- java正则表达式之java小爬虫
- 错误解决-----java was started but returned exit code=13
- eclipse安装Spring插件后无法使用maven
- Eclipse使用Maven创建Web时错误:Could not resolve archetype
- java的常用算法
- 六大设计原则(2) 单一职责原则
- MyEclipse安装后需要进行的配置
- Java中普通代码块,构造代码块,静态代码块区别
- myeclipse快捷键ctrl+alt+向下箭头与屏幕翻转快捷键冲突解决方案
- Java:输入输出流
- java Executor框架
- JAVA 多态
- Struts自定义类型转换器
- Java线程的几种状态