20155318 2016-2017-2 《Java程序设计》第七学习总结

教材学习内容总结

学习目标

  1. 了解Lambda语法
  2. 了解方法引用
  3. 了解Fucntional与Stream API
  4. 掌握Date与Calendar的应用
  5. 会使用JDK8新的时间API

Lambda语法

  • 一种匿名方法
  • 表达式构成
    • 括号以及括号里用逗号分隔的参数列表
    • 仅有一个参数的可以省略括号
    • ->符号
    • 花括号以及花括号里的语句
    • 仅有一条语句时可以省略花括号,并且这条语句的值将作为return返回值。
  • 作用域
    • 进行变量捕捉

时间

  1. 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间。
  2. 在1972年引入UTC之前,GMT与UT是相同的。
  3. 秒的单位定义时基于TAI。也就是铯原子辐射的振动次数。
  4. 世界协调时间(UTC),UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

年历

  1. 儒略历修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
  2. 格里高利历将儒略历1582年10月4号星期四的隔天,订为格里高利历1582年10月15日星期五。
  3. ISO 8601标准采用统一的数据格式。

Date

  • 无自变量构造函数,内部为System.currentTimeMillis(),返回long型,代表1970年1月1日0时0分0秒0毫秒至今的毫秒数
  • 调用getTime()可取得内部保存的epoch毫秒数值
  • DateFormat是抽象类,格式化成人类理解的年月日时分秒,操作类java.text.SimpleDateFormat

Calendar

  • getInstance(): 默认取得GregorianCalendar实例
  • getTime():取得Date实例
  • get():取得年月日字段
  • add():改变Calendar的时间
  • roll():加减日期中某个字段
  • after()/before():比较两个Calendar的时间日期先后

JDK8新时间日期API

  1. 机器时间 Instant(内含epoch毫秒数)

    • 静态方法now():取得代表Java epoch毫秒数的Instant实例
  2. 人类时间(ISO8601 标准)
  • LocalDateTime:包括日期与时间
  • LocalDate:只有日期,设定不存在的日期时会抛出DateTimeException错误。
  • LocalTime:只有时间。
  • ZonedDateTime:当补上时区信息后组合起来的时间实际上不存在时,ZonedDateTime会自动更正。
  • OffsetdateTime:单纯代表UTC偏移量,使用ISO 8601
  • Year、YearMonth、Month、MonthDay:如果只想要表示年或月,使用Year或Month;如果想要表示年月或月日,使用YearMonth或MonthDay。

时间运算

  • TemporalAmount:时间差以Duration定义,日期差以Period定义
  • TemporalUnit:between()方法用于计算时间差
  • TemporalAccessor:定义了只读的时间对象

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

  • 问题1:API文档中有这样的一段话: Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone方法将会导致在运行时抛出异常。p435 CalendarUtil.java: Calendar测试为什么直接调用clone()?
  • 代码片段
    public static long yearsBetween(Calendar begin, Calendar end) {
Calendar calendar = (Calendar) begin.clone();
long years = 0;
while (calendar.before(end)) {
calendar.add(Calendar.YEAR, 1);
years++;
}
return years - 1;
} public static long daysBetween(Calendar begin, Calendar end) {
Calendar calendar = (Calendar) begin.clone();
long days = 0;
while (calendar.before(end)) {
calendar.add(Calendar.DATE, 1);
days++;
}
return days - 1;
}
}
  • 解决方案:当需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,可以使用clone方法,程序中为了在Calendar实例上进行add()操作的时候,保证自身变量不会被修改,对自变量进行一次clone()复制对象的操作。但是Object类本身不实现接口Cloneable,所以在类为Object的对象上调用clone方法将会导致在运行时抛出异常。

  • 问题2:如何计算一个程序的运行时间

  • 解决方案:结合这周学习的知识,查询资料,发现都是在程序一开始先获取时间,然后运行程序,在程序结束后再获取时间,求时间差。

startTime = System.currentTimeMillis();//获取当前时间
//doSomeThing(); //要运行的java程序
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
  • 但是具体的问题还要结合具体问题来分析,比如有的程序非常短,执行时间也非常短,就可以让程序执行多次,从而提高获得时间的精确度。比如计算程序循环10000次的时间:
for(int i=0;i<10000;i++){//计算循环10000的时间
str=str+i;
}

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

  1. 在基本类型变量里=是赋值符号b=a,a与b有相同的值,改变a或b的值不影响彼此
  2. 对象间的:
Java.util.Date date1 = new java.util.Date();
java.util.Date date2 = date1;

表示date1 与date2指向相同的对象,指向相同的存储空间。

3. clone()

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

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

  • 问题2:getValue()与oridinal()
  • 解决方案:取得代表月份的数字时,要通过getValue()方法,如果用oridinal()方法会出现比实际情况小一的情况

代码托管

代码行数统计

上周考试错题总结

  • 错题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
  • 正确答案: A C
  • 解析:copy是Windows下的命令。cat f1.txt > f2.tx 通过输出重定向实现了复制。
  • 错题2:下面代码中共有()个线程?
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
  • 正确答案: C
  • 错题3:以下()方法会使线程进入阻塞状态?
  • A .Thread.sleep()
  • B .wait()
  • C .notify()
  • D .interrupt()
  • 正确答案: A B
  • 错题4:如果有以下代码段:
Thread thread = new Thread(new ________________() {
public void run() {...}
});
  • 空白部分指定哪些类型可以通过编译?
  • A .Runnable
  • B .Thread
  • C .Future
  • D .Executor
  • 正确答案: A B
  • 错题5:调用线程的interrupt()方法 ,会抛出()异常对象?
  • A .IOException
  • B .IllegalStateException
  • C .RuntimeException
  • D .InterruptedException
  • E .SecurityException
  • 正确答案: D E
  • 错题6:现有
class Calc {
public static void main(String [] args) {
try {
int x = Integer.parselnt ("42a") ;
//insert code here
System.out.print ("oops");
}
}
}
  • 下面哪行分别插入到第五行,会导致输 "oops" ?
  • A .catch (IllegalArgumentException e) {
  • B .} catch (IllegalStateException c) {
  • C .} catch (NumbelFormatException n) {
  • D .} catch (ClassCastException c) {
  • 正确答案: A C
  • 错题7:现有
 class Calc {
public static void main(String [] args) {
try {
int x = Integer.parselnt ("42a") ;
//insert code here
System.out.print ("oops");
}
}
}
  • 下面哪行分别插入到第五行,会导致输 "oops" ?
  • A .catch (IllegalArgumentException e) {
  • B .} catch (IllegalStateException c) {
  • C .} catch (NumbelFormatException n) {
  • D . } catch (ClassCastException c) {
  • 错题8: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()
  • 正确答案: D F
  • 解析:D, F. There is no such class as ParallelStream, so A and E are incorrect. The method defined in the Stream class to create a parallel stream from an existing stream is parallel(); therefore F is correct and C is incorrect. The method defined in the Collection class to create a parallel stream from a collection is parallelStream(); therefore D is correct and B is incorrect.

结对及互评

点评过的同学博客和代码

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

这周进行了Java的第一次实验,很多代码量都是实验贡献的,Java教材的学习接近尾声,但是自己不看书独自编代码还是会出现很多问题,这是接下来这几周首要攻克的问题。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/100 1/1 24/24 安装学习Java的一系列软件
第二周 250/300 1/2 30/54 了解Java的基本语法
第三周 552/852 1/3 16/60 了解Java是面向对象的语言
第四周 717/1569 1/4 10/70 了解Java继承与接口
第五周 495/2064 1/5 6/76 了解异常处理,学会使用Collection收集对象
第六周 754/2818 1/6 6/82 了解串流和线程
第七周 679/3493 2/8 5/87 了解时间与日期,掌握Date和Calendar的一些用法
  • 计划学习时间:6小时

  • 实际学习时间:5小时

参考资料

20155318 2016-2017-2 《Java程序设计》第七学习总结的更多相关文章

  1. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  2. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  3. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  4. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  5. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  6. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  7. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  8. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  9. 201671010127 2016—2017—2 Java怎样解决Java程序中中文乱码的问题。

    这是本次第二次分享新手在编程中遇到的问题,相信很多Java新手和我一样,在Java编程中会遇到中文乱码的情况,下面我就给大家分享我遇到问题和解决问题的具体过程. 我先用Notepad++写了一个如下的 ...

  10. 201671010127 2016—2017—2 Java学习周结

    时间真是个最公平东西,只要能够好好地利用它,它可以为我们带来我们我们所想要的东西.学习Java已经有一周了,对于Java基础知识的认识也更进一步,对Java的兴趣也愈来愈浓.实现一个Java程序,主要 ...

随机推荐

  1. UBUNTU16.04 连接不了cn.archive.ubuntu.com

    ubuntu系统更换源 更换源的方法非常简单:修改/etc/apt/sources.list文件即可 进入目录 /etc/apt cd /etc/apt修改sources.list文件 sudo vi ...

  2. Leetcode题解之Container With Most Water

    1.题目描述 2.题目分析 首先,这个题可以使用暴力解法,时间复杂度是O(n^2),这个显然是最容易的做法,但是效率不够高,题目提供了一种解法,使用两个指针,一个从头向尾部,另外一个从尾部向头部,每一 ...

  3. Jquery 保留N位小数,且千位以上用","号隔开

    s:数据Value n:保留小数位数 function jinEFmoney(s, n) { if (s == '' || s == null) return '0.00'; n = n > 0 ...

  4. 记开发个人图书收藏清单小程序开发(三)DB设计

    主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...

  5. GONMarkupParser的使用

    GONMarkupParser的使用 说明 这是一个写得非常好的富文本工具类,便于你进行简易的封装.本人抛砖引玉,只进行了少量的简化使用封装. 效果 源码 https://github.com/nic ...

  6. Linux alias命令详解

    alias:内置命令(没有路径),设置命令的别名,保护系统,方便 unalias:别名取消 常用的命令展示 临时设置 alias cp='cp –i' unalias cp      取消系统的别命令 ...

  7. 泛微e-cology和Oracle无法启动的解决方案

    最近公司的泛微OA无法访问,Oracle数据库也无法正常启动,尝试了好多方法,终于解决了,先说说基本情况,希望能给碰到同样问题的朋友带来一点帮助. 服务器操作系统:Window s Server 20 ...

  8. springmvc 拦截器的使用小结

    /** * * * * 拦截器的作用: * 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截. * 1.全局日志(谁提交了请求,要做什么事) * 2.权限管理(每个请 ...

  9. 缓存知识整理(包含Redis)

    一.缓存知识 1.buffer和cache的区别 Buffer 缓冲 写操作 写缓冲    Cache 缓存 读操作 读缓存 磁盘-->内存-->CPU 2.PHP的缓存方案 官方文档:h ...

  10. XtraEditors二、ComboBox、ComboBoxEdit、CheckedComboBoxEdit

    https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.ComboBoxEdit.class 1.使用Winf ...