20145308刘昊阳 《Java程序设计》第8周学习总结
20145308刘昊阳 《Java程序设计》第8周学习总结
教材学习内容总结
第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()方法指定父Logger15.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
- 对数组进行管线化操作
- 使用
Arrays的asList()方法返回List,而后调用stream()方法取得stream实例 使用
Arrays的stream()方法,可以指定数组后返回Stream实例代码托管截图

教材学习中的问题和解决过程
- 问题:p471LoggerDemo为什么不会输出Level.CONFIG和Level.FINE的信息
- 解决过程:结合P472图示与P473讲解,得知Logger的层级必须大于等于父Logger,才能将信息输出至控制台,Logger层级默认为INFO,Level.CONFIG和Level.FINE都小于INFO,所以不会输出
代码调试中的问题和解决过程
本周代码调试没有问题
其他(感悟、思考等,可选)
学习了将系统运行记录到日志的方法,通过日志的层级关系,结合了继承的知识,更深的理解了父类和子类的关系,还学习了国际化标准和规则表达式
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 30/30 | 1/2 | 16/16 | 基本概念 |
| 第二周 | 100/130 | 1/3 | 18/34 | 基础语法 |
| 第三周 | 100/230 | 1/4 | 26/60 | 对象封装 |
| 第四周 | 300/530 | 1/5 | 30/90 | 继承接口 |
| 第五周 | 300/830 | 1/6 | 30/120 | 异常Map、Collection |
| 第六周 | 300/1230 | 2/8 | 30/150 | 输入输出、并行 |
| 第七周 | 100/1330 | 2/10 | 10/160 | 时间日期 |
| 第八周 | 100/1430 | 2/12 | 15/175 | 通用API |
20145308刘昊阳 《Java程序设计》第8周学习总结的更多相关文章
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- md5sum
[root@NB index]# ls index()().html index()().html index()().html index()().html index()().html [root ...
- HTTP 请求头中的 X-Forwarded-For
https://imququ.com/post/x-forwarded-for-header-in-http.html
- Dubbo超时和重连机制
dubbo启动时默认有重试机制和超时机制.超时机制的规则是如果在一定的时间内,provider没有返回,则认为本次调用失败,重试机制在出现调用失败时,会再次调用.如果在配置的调用次数内都失败,则认为此 ...
- Linux性能分析工具的安装和使用
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
- AIX扩展文件系统的大小
由于AIX系统空间不够需要增加硬盘,希望增加文件系统的空间,折腾了好几天怎么都不能扩展文件系统的空间,原来是把硬盘加错了卷组 首先,确定文件系统所在的LV /dev/datalv 270.0 ...
- 湘潭邀请赛 Hamiltonian Path
湘潭邀请赛的C题,哈密顿路径,边为有向且给定的所有边起点小于终点,怎么感觉是脑筋急转弯? 以后一定要牢记思维活跃一点,把复杂的事情尽量简单化而不是简单的事情复杂化. #include<cstdi ...
- php计算几分钟前、几小时前等
function format_date($time){ $t=time()-$time; $f=array( '=>'年', '=>'个月', '=>'星期', '=>'天' ...
- apt-get常见错误——Unmet dependencies
转自:http://blog.sina.com.cn/s/blog_4980828b0100zicn.html 安装错误:“E: Unmet dependencies.”原因:非正常停止apt-get ...
- Android使用JNI实现Java与C之间传递数据(转)
介绍Java如何将数据传递给C和C回调Java的方法. java传递数据给C,在C代码中进行处理数据,处理完数据后返回给java.C的回调是Java传递数据给C,C需要用到Java中的某个方法,就需 ...
- mathematica练习程序(获得股票数据)
从去年的11月开始,中国的股市就一直大涨,不知道这次能持续多长时间. 为了获得股票数据,我用matlab试了网上的一些方法,总是失败,所以就改用mathematica,一行代码就可以了. DateLi ...