• 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("	LONG: %s%n",getDateInstance(LONG).format(date));
            out.printf("	MEDIUM: %s%n",getDateInstance(MEDIUM).format(date));
            out.printf("	SHORT: %s%n",getDateInstance(SHORT).format(date));
    }
    static void timeInstanceDemo(Date date){
            out.println("getTimeInstance() demo");
            out.printf("	LONG: %s%n",getTimeInstance(LONG).format(date));
            out.printf("	MEDIUM: %s%n",getTimeInstance(MEDIUM).format(date));
            out.printf("	SHORT: %s%n",getTimeInstance(SHORT).format(date));
    }
    static void dateTimeInstanceDemo(Date date){
            out.println("getDateInstance() demo");
            out.printf("	LONG: %s%n",getDateTimeInstance(LONG,LONG).format(date));
            out.printf("	MEDIUM: %s%n",getDateTimeInstance(MEDIUM,MEDIUM).format(date));
            out.printf("	SHORT: %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 学会了测试代码

    参考资料

  • 相关阅读:
    buuctf-web [强网杯 2019]随便注 1
    buuctf-crypto 引用可打印
    buuctf-crypto 变异凯撒
    buuctf-misc 文件中的秘密
    buuctf-misc LSB
    nginx 模块配置
    cloudflare CDN下nginx获取用户真实IP地址
    使用nginx后如何在web应用中获取用户ip及原理解释
    获取用户真实 ip 地址的 nginx 相关配置
    解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  • 原文地址:https://www.cnblogs.com/20145208cy/p/5400863.html
Copyright © 2020-2023  润新知