20145208 《Java程序设计》第7周学习总结
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与DateFormat
- Date只用来获取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 | 学会了测试代码 |
参考资料
20145208 《Java程序设计》第7周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- Scrum不是万能药,要在时机成熟时推行
敏捷很火热,大家都在谈敏捷:但不是所有团队都适合敏捷! 需要等待时机,时机成熟了,才推! 什么时候算时机成熟呢? 我们的经验是需要两点: 一.团队有三名或以上的研发工程师 : 二. 团队内有一名合适的 ...
- c# 其他技术学习
1.注册表编辑 为了方便对注册表进行操作,.NET提供了Registry类和RegistryKey类 2.API函数的应用 (1)自定义特性的代码:在类.属性.方法的上方加上“[]”的代码 (2)有个 ...
- 一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)
问题: 问题出处见 C语言初学者代码中的常见错误与瑕疵(5) . 在该文的最后,曾提到完成的代码还有进一步改进的余地.本文完成了这个改进.所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己 ...
- CSS纯样式实现箭头、对话框等形状
在使用第三方框架bootstrap的时候,本以为其是图片实现的小箭头,后来使用开发工具查看是用CSS来实现的,现记录如下: 之前都没仔细去观注过其原理,都是拿来使用,在实现小箭头之前需要了解下CSS的 ...
- [嵌入式开发板]iTOP-4412以模块的方式编译驱动
本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...
- [转]用NPOI操作EXCEL--数据有效性
本文转自:http://www.cnblogs.com/atao/archive/2009/09/22/1572170.html 在有些情况下(比如Excel引入),我们可能不允许用户在Excel随意 ...
- 【NOIP合并果子】uva 10954 add all【贪心】——yhx
Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...
- 数论+spfa算法 bzoj 2118 墨墨的等式
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1283 Solved: 496 Description 墨墨突然对等式很感兴 ...
- Rem实现自适应初体验
第一次做移动端的页面,遇到的第一个问题就是移动端的轮播图.其实轮播图的插件有很多,但是完全满足需求的并不容易找. 需求: 1.实现基本的触屏轮播图效果 2.传入非标准比例的图片,可以自动平铺(有时候图 ...
- jquery 实现邮箱输入自动提示功能:(二)
上篇文章写到了一个不错的jquery实现邮箱输入自动提示功能,发现还有一个不错的自动提示插件: 先展示结果如图: html代码: <center> <h1>输入邮箱试试!< ...