20155207 2016-2017-2 《Java程序设计》第八周学习总结
2017-04-16 19:54
351 查看
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.贪婪、逐步、独吐量词
贪婪量词:是贪婪量词表示法的一种,贪婪量词会尽可能的找到长度最长的符合文字
逐步量词:在贪婪量词表示法后加上?,会成为逐步量词(懒惰量词,非贪婪量词),会找到长度最短的符合文字
独吐量词:在贪婪量词表示法后加上+,会成为独吐量词,将剩余文字吃掉,然后看看独吞量词部分是否符合吃下的文字,如果符合就不会再吐出来了
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新增API1.String.join()、StringJoiner
String上有
join()静态方法可以指定每个字符串间以什么间隔
Collectors上有
joining()静态方法
2.Arrays
paralleSort()方法可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序
15.4.2 Stream相关API
对数组进行管线化操作
使用
Arrays的
asList()方法返回List,而后调用
stream()方法取得stream实例
使用
Arrays的
stream()方法,可以指定数组后返回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()
结对及互评
评分标准
正确使用Markdown语法(加1分):不使用Markdown不加分
有语法错误的不加分(链接打不开,表格不对,列表不正确...)
排版混乱的不加分
模板中的要素齐全(加1分)
缺少“教材学习中的问题和解决过程”的不加分
缺少“代码调试中的问题和解决过程”的不加分
代码托管不能打开的不加分
缺少“结对及互评”的不能打开的不加分
缺少“上周考试错题总结”的不能加分
缺少“进度条”的不能加分
缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
一周提交次数少于20次的不加分
其他加分:
周五前发博客的加1分
感想,体会不假大空的加1分
排版精美的加一分
进度条中记录学习时间与改进情况的加1分
有动手写新代码的加1分
课后选择题有验证的加1分
代码Commit Message规范的加1分
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
结对学习情况真实可信的加1分
扣分:
有抄袭的扣至0分
代码作弊的扣至0分
迟交作业的扣至0分
点评模板:
博客中值得学习的或问题:xxx
xxx
...
代码中值得学习的或问题:
xxx
xxx
...
点评过的同学博客和代码
本周结对学习情况 :通用API20155223
结对照片
结对学习内容
-通用API
上周博客互评情况
20155306
20155321
20155307
20155311
其他(感悟、思考等,可选)
学习了将系统运行记录到日志的方法,通过日志的层级关系,结合了继承的知识,更深的理解了父类和子类的关系,还学习了国际化标准和规则表达式学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
相关文章推荐
- 20155321 2016-2017-2 《Java程序设计》第八周学习总结
- 20155330 2016-2017-2 《Java程序设计》第八周学习总结
- 20155227 2016-2017-2 《Java程序设计》第八周学习总结
- # 20155337 2016-2017-2 《Java程序设计》第八周学习总结
- 20155334 2016-2017-2 《Java程序设计》第八周学习总结
- 20155313 2016-2017-2 《Java程序设计》第八周学习总结
- 20155225 2016-2017-2 《Java程序设计》第八周学习总结
- 20155315 2016-2017-2 《Java程序设计》第八周学习总结
- 20155230 2016-2017-2 《Java程序设计》第八周学习总结
- 20155229 2016-2017-2 《Java程序设计》第八周学习总结
- 20155216 2016-2017-2 《Java程序设计》第八周学习总结
- ## 20155336 2016-2017-2《JAVA程序设计》第八周学习总结
- 20155320 2016-2017-2《Java程序设计》第八周学习总结
- 20155302 2016-2017-2 《Java程序设计》第八周学习总结
- 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结
- 20155201 2016-2017-2 《Java程序设计》第八周学习总结
- 20155236 2016-2017-2 《Java程序设计》第八周学习总结
- 2016-2017-2 20155309 南皓芯《java程序设计》第八周学习总结
- 20155207王雪纯 2016-2017-2 《Java程序设计》第六周学习总结
- 20155220 2016-2017-2 《Java程序设计》第八周学习总结