• 20155321 2016-2017-2 《Java程序设计》第八周学习总结


    20155321 2016-2017-2 《Java程序设计》第八周学习总结

    教材学习内容总结

    • 创建Logger对象

      • static Logger getLogger(String name):为指定子系统查找或创建一个 logger
      • static Logger getLogger(String name, String resourceBundleName):为指定子系统查找或创建一个 logger

      注意:name是Logger的名称,当名称相同时候,同一个名称的Logger只创建一个

    • Logger的级别

      • 比log4j的级别详细,全部定义在java.util.logging.Level里面

      • 各级别按降序排列如下:

        SEVERE(最高值)

        WARNING

        INFO

        CONFIG

        FINE

        FINER

        FINEST(最低值)

    注意:

    1. 还有一个级别OFF,可用来关闭日志记录,使用级别ALL启用所有消息的日志记录

    2. logger默认的级别是INFO,比INFO更低的日志将不显示

    • Logger的Handler

      • Handler对象从Logger中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中

      • 通过执行setLevel(Level.OFF)来禁用Handler,并可通过执行适当级别的setLevel 来重新启用

      • Handler类通常使用LogManager属性来设置Handler的Filter、Formatter 和 Level 的默认值

      • 默认的日志方式是xml格式,但是最好自定义下logger的格式,这需要用Formatter来定义

      • FileHandler默认以XML形式输出

      • ConsoleHandler默认采用文本形式输出

      • 默认level为INFO.

    • Logger的Formatter

      • Formatter为格式化LogRecords 提供支持

      • 一般而言,每个日志记录Handler都有关联的 Formatter。Formatter接受LogRecord,并将它转换为一个字符串。有些formatter(如XMLFormatter)需要围绕一组格式化记录来包装头部和尾部字符串,可以使用 getHeader和getTail方法来获得这些字符串

      • LogRecord对象用于在日志框架和单个日志Handler之间传递日志请求

      • LogRecord(Level level, Stringmsg):用给定级别和消息值构造LogRecord。

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

    • 问题1:对课本的Logger类不太理解,对Logger类的层级的作用不是很了解
    • 问题1解决方案:

    自己写了一个小测试类进行学习

    public class TestLogger { 
        public static void main(String[] args) 
        { 
            Logger log = Logger.getLogger("lavasoft"); 
            log.setLevel(Level.INFO); 
            Logger log1 = Logger.getLogger("lavasoft"); 
            System.out.println(log==log1);     //true 
            Logger log2 = Logger.getLogger("lavasoft.blog"); 
            log2.setLevel(Level.WARNING); 
    
            log.info("aaa"); 
            log2.info("bbb"); 
            log2.fine("fine"); 
        } 
    }
    
    
    true
    四月 14, 2017 8:06:15 上午 TestLogger main
    信息: aaa
    

    当注释掉log2.setLevel(Level.WARNING);则为

    true
    四月 14, 2017 8:07:27 上午 TestLogger main
    信息: aaa
    四月 14, 2017 8:07:27 上午 TestLogger main
    信息: bbb
    
    • 从这里可以看出,logger的名字是有层级关系的。一般使用圆点分隔的层次命名空间来命名 Logger。Logger名称可以是任意的字符串,但一般应基于被记录组件的包名或类名。可通过调用某个getLogger方法来获得Logger对象

    • 问题2:对ConsoleHandler、fileHandler不太理解,不太懂得如何使用这些类

    • 问题2解决方案:

    public class TestLogger 
    { 
        public static void main(String[] args) throws IOException { 
            Logger log = Logger.getLogger("lavasoft"); 
            log.setLevel(Level.INFO); 
            Logger log1 = Logger.getLogger("lavasoft"); 
            System.out.println(log==log1);     //true 
            Logger log2 = Logger.getLogger("lavasoft.blog"); 
            //log2.setLevel(Level.WARNING); 
    
            ConsoleHandler consoleHandler =new ConsoleHandler(); 
            consoleHandler.setLevel(Level.ALL); 
            log.addHandler(consoleHandler); 
            FileHandler fileHandler = new FileHandler("g:/testlog%g.log"); 
            fileHandler.setLevel(Level.INFO); 
            log.addHandler(fileHandler); 
            log.info("aaa"); 
            log2.info("bbb"); 
            log2.fine("fine"); 
            } 
    }
     
    
    输出结果:
    true
    四月 14, 2017 8:28:58 上午 TestLogger main
    信息: aaa
    四月 14, 2017 8:28:58 上午 TestLogger main
    信息: aaa
    四月 14, 2017 8:28:58 上午 TestLogger main
    信息: bbb
    四月 14, 2017 8:28:58 上午 TestLogger main
    信息: bbb
    

    再查看g盘

    • 默认的日志方式是xml格式,格式太难看,因此要自定义下logger的格式,则需用Formatter来定义

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

    • 问题1:对课堂测试的第22题进行验证,题目是下面代码的运行结果是?
    LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
    System.out.println(date.getYear() + " " + date.getMonth()
    + " "+ date.getDayOfMonth());
    
    

    A .2018 APRIL 4

    B .2018 APRIL 30

    C .2018 MAY 10

    D .Another date

    E .The code does not compile.

    F .A runtime exception is thrown.

    老师给的正确答案是F,相应的解释是Java throws an exception if invalid date values are passed. There is no 40th day in April—or any other month for that matter

    • 问题1解决方案:
      在IDEA上运行后出现了以下说明,DateTimeException是一种runtime exception,因此选F。但是本身这个程序是可以通过编译的,因此选项E是错误的。

    代码托管

    上周考试错题总结

    • 错题1:(多选题)下面哪些Linux命令可以ASCII码和16进制单字节方法输出Hello.java的内容?

      A .od -b -tx1 Hello.java

      B .od -tcx1 Hello.java

      C .od -tc -tx1 Hello.java

      D .od -tbx1 Hello.java

    • 原因:只选了C,对B这种简写不太熟悉

    • 理解情况:正确答案是BC,-b 是以八进制输出

    • 错题2:(多选题)JDK8中的Lambda表达式有以下好处:

      A .消除重复性

      B .提高性能

      C .提高安全性

      D .改善可读性

    • 原因:本周学习没怎么看Lambda表达式的相关内容,对此不太了解

    • 理解情况:正确答案是AD。课本p384有详细说明

    • 错题3:(单选题)需要人类能理解的时间,建议使用Date类的toString().

      A .True

      B .False

    • 理解情况:正确答案是B。课本P430页有详细说明

    • 错题4:(多选题)JDK8 中新时间API中,用于度量时间的类有()

      A .Instant

      B .Duration

      C .Period

      D .LocalDateTime

    • 理解情况:正确答案是BC,课本P442有详细说明

    • 错题5:(单选题)An object can be thought of as a blueprint for a set of classes(对象被认为是类集合的蓝图).

      A .true

      B .false

    • 理解情况:正确答案是B,A class can be thought of as a blueprint for a set of objects; not the other way around.

    • 错题6:(多选题)下面哪些类的对象会包含“东部标准时间”的信息

      A .Instant

      B .LocalDate

      C .LocalDateTime

      D .LocalTime

      E .ZonedDateTime

    • 理解情况:正确答案是E。LocalXXXX explicitly excludes time zones. Instant represents a point in time, but
      always uses GMT rather than the desired time zone.

    结对及互评

    点评过的同学博客和代码

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

    随着学习不断进行,感觉学的东西也越来越难,前面有些基础打得不扎实到现在感觉都体现出来,看新的知识的时候总是被以前所影响,书上的解释有些时候感觉唐突和突兀,还是要看网上其他人的一些资料解释才行

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 1/ 20/20 对IDEA、git、JDK、JVM有了更多的了解,面对学习过程中遇到的困难学会自己主动地寻找办法去解决
    第二周 1/2 18/38 掌握了Java中的基本运算符和基本语句
    第三周 1/3 22/60 对面向对象、封装、构造函数等重要知识点有了初步理解,学会自主学习,遇到困难的时候从多方面寻找资料以求答案
    第四周 1/4 22/60 对继承和多态了一定程度的理解,并学会使用多态来提高代码的复用性
    第五周 706/2639 1/5 25/85 对异常以及集合框架的学习
    第六周 735/3194 1/6 28/113 对IO流,多线程以及并行API的学习
    第七周 428/3474 1/7 18/131 对Date的学习
    第八周 351/3825 1/8 20/151 对日志API以及规则表达式的学习

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:15小时

    • 实际学习时间:20小时

    • 改进情况:对书本的一些描述掌握得不够清晰,要多看几遍

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    Spring MVC多动作控制器
    Spring MVC简单URL处理程序映射
    Spring MVC控制器类名称处理映射
    Spring MVC文件上传处理
    再探Tomcat
    Git教程之工作区和暂存区
    linux系统启动级别
    浅析JAVA_HOME,CLASSPATH和PATH的作用
    *Linux之rm命令
    @CentOS环境下Java开发环境的搭建
  • 原文地址:https://www.cnblogs.com/rafell/p/6714364.html
Copyright © 2020-2023  润新知