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

教材学习内容总结

第15章 通用API

15.1 日志

15.1.1 日志API简介
  • java.util.loggging包提供了日志功能相关类与接口
  • 使用日志的起点是Logger类,Logger类的构造函数表示为protected,不是java.util.logging同包的类不能直接以new创建,取得Logger实例,必须用Logger的静态方法getLogger()
  • 调用getLogger()时必须指定Logger实例所属空间名称,以 . 区分层级,名称空间层级相同的Logger,其父Logger组态相同
  • 类之后接.class,可取得该类的java.lang.class实例,调用其getName()就可以取得类全名
  • 取得Logger实例之后,可以使用Log()方法输出信息,输出信息时可以使用Level的静态成员指定信息层级
  • 要输出的信息,必须先通过Logger的Level与Filter过滤,再通过Handler的Level和Filter过滤,格式化信息的动作交给Formatter

    15.1.2 制定日记层级
  • Level如果没做任何修改,取得的Logger实例之父Logger组态,Level默认是Logger.GLOBAL_LOGGER_NAME(INFO)名称空间Logger实例的组态,Handler默认是ConsoleHandler
  • Logger实例的getParent()取得父Logger实例,getlevel()取得设定的Level实例
  • Logger实例的层级必须大于或等于父Logger的Level
  • 可通过Logger的setLevel()设定层级,可用Level内建几个静态成员来指定
  • 使用intVlue()取得内含int值
  • log()时指定的Level实例内含的int值小于Logger设定的Level实例内含的int值,Logger就不会记录信息
  • Level.OFF用于关闭所有信息输出,Level.ALL用于允许所有信息输出
  • 一个Logger可以有多个Handler,通过addHandler()removeHandler()新增、移除Handler实例
  • getHandlers()方法来取得目前已有的Handler实例数组
  • Handler可以通过setLevel()设定信息
  • 一些日志层级,Logger有其对应的简便方法

    15.1.3 使用Handler与Formatter
  • MemoryHandler(信息存在缓冲区,超出缓冲区大小)、StreamHandler(可自动指定OutputStream实例)、ConsoleHandler(日志信息会显示在控制台上)、FileHandler(建立日志输出时使用的FileOutputStream)、SocketHandler(联网,将日志信息传至指定主机)
  • addHandler()removeHandler()新增、移除Handler
  • 建立FileHandler指定模式字符串,“%h”表示用户根目录,“%t”取得系统暂存目录,“%g”自动为文档编号
  • Logger的Config()是个简便方法,可以直接Level.CONFIG层级输出信息,也有severe()info()等简便方法
  • 调用Logger实例的setUseParentHandlers()设定为false,日志不会传播给父Logger,使用setParent()方法指定父Logger

    15.1.4 自定义Handler、Formatter与Filter
  • java.util.logging包中提供的Handler成果都不符合需求,继承Handler类,操作抽象方法publish()flush()close()方法来定义Handler,操作时考虑信息过滤与格式化
  • 自定义Formatter,继承Formatter后操作抽象方法format(),传入LogRecord,储存所有日志信息

    15.1.5 使用logging.properties
  • 通过logging.properties来设定Logger组态,修改.properties后另存至程序CLASSPATH中,指定java.util.logging.cofig.file系统属性为.properties名称

    15.2 国际化基础

    15.2.1 使用ResourceBundle
  • 使用ResourceBundle做信息绑定,准备.properties文档并放在CLASSPATH的路径设定下,文件中撰写键/值配对
  • ResourceBundle的静态getBundle()方法会取得一个ResourceBundle实例,给定自变量名称是信息文档的主文件名,取得实例后用getString()指定键取得文档中对应值

    15.1.2 使用Locale
  • 国际化三个重要概念:地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)
  • 地区可由一个语言编码与可选的地区编码来指定
  • 地区信息对应类是Locale,建立Locale实例时,可指定语言编码与地区编码
  • 资源包中包括了特定地区的相关信息
  • 将Unicode编码表示的.properties转回中文,使用-reverse自变量

    15.3 规则表达式

    15.3.1 规则表达式简介
  • String的spilt()方法,返回切割后各子字符串组成的String数组
  • 规则表达式基本包括两种字符:字面意义字符与元字符
  • 1.字面意义字符
    • 字母或数字:比较字母或数字
    • \:比较
  • 2.字符类
    • 任一个字符切割:[]
    • 连字符—:表示从...到...
    • 反字符^:表示除...以外的字符
    • 预定义字符
  • 3.贪婪、逐步、独吐量词
    • 贪婪量词:{n}是贪婪量词表示法的一种,贪婪量词会尽可能的找到长度最长的符合文字
    • 逐步量词:在贪婪量词表示法后加上?,会成为逐步量词(懒惰量词,非贪婪量词),会找到长度最短的符合文字
    • 独吐量词:在贪婪量词表示法后加上+,会成为独吐量词,将剩余文字吃掉,然后看看独吞量词部分是否符合吃下的文字,如果符合就不会再吐出来了
    • replaceAll()会将符合规则表达式的字符串取代后返回新字符串
  • 4.边界比较
    • 边界比较用来表示文字必须符合指定的边界条件(定位点)
  • 5.分组与参考
    • 使用()将规则表达式分组,被分组的规则表达式可以在稍后回头参考

      15.3.2 Pattern与Matcher
  • java.util.Regex.Pattern实例是规则表达式在JVM中的代表对象,Pattern的构造函数被标示为private,无法用new创建Pattern实例,必须通过Pattern的静态方法compile()来取得
  • 取得Pattern实例后,可以使用mather()方法将指定字符串依规则表达式切割
  • 使用matcher()方法指定要比较的字符串,find()方法看是不是有下一个符合字符串,lookingAt()看字符串开头是否符合规则表达式,group()方法返回符合的字符串
  • 规则表达式中有分组,group()可以接受int整数指定分数计数(1-...),group(0)相当于group()
  • replaceAll()方法,将符合规则表达式的部分以指定的字符串替代,replaceFirst()replaceEnd()分别可取代首个、最后反符合规则表达式部分,start()方法可取得符合字符串的起始索引,end()取得符合字符串最后一个字符后的索引

    15.4 JDK8 API增强功能

    15.4.1 StringJoiner、Arrays新增API
  • 1.String.join()、StringJoiner
    • String上有join()静态方法可以指定每个字符串间以什么间隔
    • Collectors上有joining()静态方法
  • 2.Arrays
    • paralleSort()方法可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序

      15.4.2 Stream相关API
  • 对数组进行管线化操作
    • 使用ArraysasList()方法返回List,而后调用stream()方法取得stream实例
    • 使用Arraysstream()方法,可以指定数组后返回Stream实例

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

  • 问题:p471LoggerDemo为什么不会输出Level.CONFIG和Level.FINE的信息
  • 解决过程:结合P472图示与P473讲解,得知Logger的层级必须大于等于父Logger,才能将信息输出至控制台,Logger层级默认为INFO,Level.CONFIG和Level.FINE都小于INFO,所以不会输出

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

本周代码调试没有问题

代码托管

上周考试错题总结

  • 错题1:vi中哪条命令是不保存强制退出?
    A .:wq

B .:wq!

C .:q!

D .:q

理解情况 C.:wq 是保存退出。 !表示强制。

  • 错题2:hen applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).
    A .static

B .final

C .public

D .private

E .none of the above(以上都不是)

  • 错题3:Given the following, which answers can correctly fill in the blank? (Choose all that apply.)针对下面的代码,()中应填入哪个选项?
    LocalDate date = LocalDate.now();
    LocalTime time = LocalTime.now();
    LocalDateTime dateTime = LocalDateTime.now();
    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneId);
    long epochSeconds = 0;
    Instant instant = ( );
    A .Instant.now()

B .Instant.ofEpochSecond(epochSeconds)

C .date.toInstant()

D .dateTime.toInstant()

E .time.toInstant()

F .zonedDateTime.toInstant()

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...

点评过的同学博客和代码

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

学习了将系统运行记录到日志的方法,通过日志的层级关系,结合了继承的知识,更深的理解了父类和子类的关系,还学习了国际化标准和规则表达式

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 2/2 20/20
第二周 186/186 2/4 18/38
第三周 689/875 3/7 22/60
第四周 242/1117 2/9 30/90
第五周 698/1815 2/9 30/120
第六周 1269/3084 2/9 30/120
第七周 342/3426 2/9 30/120
第八周 398/3824 2/9 30/120

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

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

  • 计划学习时间:24小时

  • 实际学习时间:23小时

  • 改进情况:

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

参考资料

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

  1. 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结

    20155207王雪纯 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 整数类型:short(占2字节).int()占4字节.long(占8字节) " ...

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

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

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

    20155207 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立 ...

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

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

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

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

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

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

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

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

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

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

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

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

  10. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

随机推荐

  1. python2.0_s12_day9_协程&Gevent协程

    Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又 ...

  2. Win8/8.1下驱动安装“数据无效”错误的有效解决方法

    Windows8.1 安装完vmware 后并没有安装 vmnet1,vmnet8 这两个虚拟网卡,纠结了半天,原来是两个服务没打开. 如果你使用的是Windows8或者8.1,并且精简过系统,那么在 ...

  3. js里面进行位运算时候的注意事项

    &(按位与):两个操作数都是1就是1 任何数与1按位与的出来的都是其二进制最后一位:任何数与0按位与都是0|(按位或):两个操作数一个是1就是1 任何数与0按位或都是其本身^(按位异或):两个 ...

  4. php学习九:存取器&魔术方法

    当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问 方法一:存取器: 可以提供一个public的方法来使外界对类里面的 ...

  5. 百度地图地址查询API使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgsAAALxCAIAAABdNHLmAAAgAElEQVR4nOy9/VMbZ5rvnf/hbM7zy3 ...

  6. ubuntu 安装nfs 服务

    1. 安装nfs服务软件 (1)服务器端 $sudo apt-get install nfs-kernel-server  rpcbind (2)客户端 (可以省略) $sudo apt-get in ...

  7. Size Balanced Tree

    Size Balanced Tree(SBT)是目前速度最快的平衡二叉搜索树,且能够进行多种搜索操作,区间操作:和AVL.红黑树.伸展树.Treap类似,SBT也是通过对节点的旋转来维持树的平衡,而相 ...

  8. poj_1442 Treap

    Treap是一种动态平衡二叉树结构,具有期望的O(log2n)的复杂度.适用于动态区间数据的查询.更改.维护等操作. 题目大意 一组数从前向后插入队列中,插入的过程中会有查询,查询当前队列中的第k小的 ...

  9. github团队协作教程

    跟着笔者魔鬼般的步伐,我们一起来瞅瞅一个团队协作的任务如何进行版本管理吧~ 要跟上哦~ =============================================== 首先我们先来看下 ...

  10. 再谈js的作用域

    再谈js的作用域 面试中遇到的题目: 题目一: var word = "hello world";  (function(){  alert(word);  var word = ...