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小时

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

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

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

  1. 201521123027 <java程序设计>第八周学习总结

    1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...

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

    20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...

  3. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  5. 20155334 2016-2017-2 《Java程序设计》第九周学习总结

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

  6. 20155330 2016-2017-2 《Java程序设计》第九周学习总结

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

  7. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  8. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  9. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  10. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

随机推荐

  1. 图-图的表示、搜索算法及其Java实现

    1.图的表示方法 图:G=(V,E),V代表节点,E代表边. 图有两种表示方法:邻接链表和邻接矩阵 邻接链表因为在表示稀疏图(边的条数|E|远远小于|V|²的图)时非常紧凑而成为通常的选择. 如果需要 ...

  2. Bitcoin区块验证

    目录 区块的生成 区块的验证链接 验证过程 Merkle Tree结构 区块的生成 矿工在挖矿前要组建区块 将coinbase交易打包进区块 将交易池中高优先级的交易打包进区块 优先级 = 交易的额度 ...

  3. 关于T/G/M/K

    //扫盲贴 K, G, T,都是表数量,只是个数字,在不同的场合下表示的不同.在计算机行业中,这几个量可用来表示数据传输速度和容量,下面分别讨论,希望不了解的朋友不要被某知道上的误解了.如果有什么错误 ...

  4. SDN交换机迁移2

    关于迁移过程中迁移目标(被迁移的交换机和目标控制器)的选择 SDN中基于过程优化的交换机竞争迁移算法 通信学报 交换机:请求速率大于域内平均请求速率的交换机集合: 控制器:综合网络中时延.流量和控制器 ...

  5. (Alpha)Let's-NABC

    效果图 NABC Need 在日常生活中我们也许经常有这样的疑问:在空闲时间内经常感到无处可去:抑或是有个心血来潮的想法却无人响应:或者困扰于自己狭小的交际圈,希望能有更多的朋友.(打个羽毛球没人一起 ...

  6. ElasticSearch 2 (34) - 信息聚合系列之多值排序

    ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...

  7. psp进度统计

    每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间    11月8日 代码 参与团队项目 10:13 11:30 0 77min 写博客 词频统计总结 13:35 14 ...

  8. 统计nginx日志的状态码

    日志格式 61.159.140.123 - - [23/Aug/2014:00:01:42 +0800] "GET /favicon.ico HTTP/1.1" 404 \ &qu ...

  9. anaconda的spyder打不开

    因为最近一段时间没有用Spyder,今天使用时,发现Spyder又又打不开了. 之前遇到Spyder打不开的情况时,是根据这里的教程:删除.matplotlib和.spyder两个文件,但这次删除这两 ...

  10. 模拟APP存储空间、内存不足情况下软件正常运行

    1.进行临界测试,手机盘空间存满的条件下应用会有何表现: 方法一:adb shell dd if=/dev/zero of=/mnt/sdcard/bigfile 方法二:哆啦A工具生成文件 2.内存 ...