• 20145221 《Java程序设计》第七周学习总结


    20145221 《Java程序设计》第七周学习总结

    教材学习内容总结

    第十二章部分 - Lambda

    认识Lambda语法

    • Lambda去可以重复,符合DRY原则,而且Lambda表达式可读性更好,操作更简单
    • 匿名类型最大的问题就在于其冗余的语法,lambda表达式是匿名方法,它提供了轻量级的语法,从而解决了匿名内部类带来的冗余问题。
    • 示例:
    (int x, int y) -> x + y;
    () -> 42;
    (String s) -> { System.out.println(s); 
    

    第一个lambda表达式接收x和y这两个整形参数并返回它们的和;第二个lambda表达式不接收参数,返回整数'42';第三个lambda表达式接收一个字符串并把它打印到控制台,不返回值。

    • 接口默认方法:在JDK8中,interface定义时可以加入默认操作,或者称为默认方法(Default methods),forEach()方法本身已有操作,所以不会破坏Iterable现有的其他操作。在默认方法中不能使用数据成员,因为接口本身不能定义数据成员,也就是默认方法中不能用直接变更状态的流程。

    Functional与Stream API

    • 使用Optional代替null
    • 标准API的函数接口
      • Consumer:一个参数,无返回值
      • Function:一个参数,有返回值
      • Predicate:一个参数,有返回值,返回值必须是boolean类型的
      • Supplier:无参数,有返回值
    • Stream与管道

    Lambda与并行处理

    第十三章部分 - 时间与日期

    认识时间与日期

    • 时间的度量
      • 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毫秒数
    • 日历
      • 儒略历(Julian Calendar)
        儒略历是现今公历的前身,用来取代罗马历,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
      • 格里高利历(Gregorian Calendar)
        格里高利历将儒略历1582年10月4日星期四的隔天,订为格里高利历1582年10月15日星期五。
      • ISO8601 标准
        ISO 8601并非年历系统,而是时间日期表示方法的标准,用意统一时间日期的数据交换格式。在ISO 8601标准的定义中,19世纪是指1900年到1999年,而格里高利历的19世纪是指1801年到1900年。

    认识Date与Calendar

    • 时区:考虑了UTC偏移的时间表示上,通常会标识Z符号。
    • Date与DateFormat
      • Date:使用System.currentTimeMillis()方法,返回的是long类型的整数,代表1970年1月1日00:00:00至今经过的毫秒数,只用来获取epoch毫秒数。
      • DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,用来格式化成人类理解的年月日时分秒。
    • Calendar: 时间的运算
      • getInstance(): 要取得某个时间日期资讯,或者是对时间日期进行操作,可以使用Calendar实例,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例
      • getTime():取得Calendar实例后,可以使用getTime()取得Date实例
      • get():如果想要取得年月日等日期时间字段,可以使用get()方法指定Calender上的字段枚举常数
      • add():改变实例的时间
      • roll():如果打算只针对日期中某个字段加减,则可以使用roll()方法
      • after():比较两个实例的日期先后
      • before():比较两个实例的日期先后
      • ...

    JDK8新时间日期API

    • 机器时间 Instant
      • Calendar的getTime()返回false实例,取得Date实例,下一步应该获取时间信息,应该是通过Date的getTime()取得epoch毫秒数
      • 用以代表自定义的Java epoch之后的某个时间点历经的毫秒数,精确度基本上是毫秒。使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例,取得Instant实例后,可以使用plusSeconds()、plusMillis()、plusNanos()、minusSeconds()、minusMillis()、minusNanos()来做时间轴上的运算,Instant实例本身不会变动,这些操作会返回新的Instant实例,代表运算后的瞬时
    • 人类时间(ISO8601 标准)
      • LocalDateTime:包括日期与时间
      • LocalDate:只有日期
      • LocalTime:只有时间
      • ZonedDateTime:时区的日期与时间
      • OffsetdateTime:代表UTC偏移量
      • Year:表示年
      • YearMonth:表示年月
      • Month:表示月
      • MonthDay:表示月日

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

    问题一:

    • 教材P435页提到“想比较两个Calendar的时间日期先后,可以使用after()before()方法”,但是书中没有给出具体的例子,不知道是什么用法,应该传入什么样的参数。不过通过查询API可知:

    • 从而也可以推测出before()的用法,与after()恰好相反。

    问题二:

    • 教材p430页DateFormatDemo.java代码运行结果:

    • 这段代码与书中的格式不同,上述输出应该是正确的。

    问题三:

    • 教材p436页TimeZoneDemo.java代码运行结果:

    • 时区ID显示的是Asia/Shanghai,为什么不是北京呢?通过查阅相关资料,发现Java所支持的所有时区ID里面并没有Asia/Beijing,所以对于中国大陆时区的而言,显示的应该都是Asia/Shanghai

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

    • 这周内容因为只要求一章内容,学习任务相对来说较为轻松。本次接触到了Java中的时间,认识到Java中对时间的处理机制,感觉Java还是很严谨细致的,时间虽然很重要,但在平时真的很少有专门关注到它,这次通过Java的学习,从时间到时区都大致了解了一下,也对Java中的处理方式有了初步的理解。

    • Java后面的知识还是不能活学活用,用起来比较生疏,或是用的时候已经记不清楚书中所讲。就像最近我感觉我对C语言的掌握加强了一样,因为其余几门实验都是用C编的,也只有反复应用才可能提升编程技术了。所以Java的提高,需要以后多实践,在实践中总结经验,提升能力。

    • 【附1】托管截图:

    • 【附2】用cloc.exe统计代码如下:

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 1/6 20/20 学会MarkdownPad2
    第二周 150/350 1/7 15/35 理解了补码机制
    第三周 500/850 1/8 25/60 初步了解了对象
    第四周 1231/2081 1/9 27/87 初步了解了继承与接口
    第五周 749/2930 3/12 30/117 了解了异常处理
    第六周 1057/3987 2/11 24/111 初步了解输入输出与线程
    第七周 371/4358 3/14 25/136 了解Java中的时间

    参考资料

  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/20145221GQ/p/5402245.html
Copyright © 2020-2023  润新知