20155236 2016-2017-2 《Java程序设计》第八周学习总结
20155236 2016-2017-2 《Java程序设计》第八周学习总结
教材学习内容总结
通用API
-
日志
1.日志API简介:java.util.logging
包中提供了日志功能相关类与接口,使用日志的起点是Logger类;
2.Logger
类的构造函数标示为protected
,不是java.util.logging
,同包的类不能直接以new创建,要取得Logger
实例,必须使用Logger
的静态方法getLogger
();
3.调用getLogger
()时,必须指定Logger
实例所属名称空间,名称空间以‘.’
作为层级区分,名称空间层级相同的Logger
,其父Logger
组态相同;
代码如下:package cc.openhome; import java.util.logging.*; public class LoggerDemo{ public static void main(String[] args){ Logger logger = Logger.getLogger(LoggerDemo.class.getName()); logger.log(Level.WARNING,"WARNING 信息"); logger.log(Level.INFO,"INFO 信息"); logger.log(Level.CONFIG,"CONFIG 信息"); logger.log(Level.FINE,"FINE 信息"); } }
4.在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。
代码如下:package cc.openhome; import java.util.logging.*; public class LoggerDemo2{ public static void main(String[] args){ Logger logger = Logger.getLogger(LoggerDemo2.class.getName()); logger.setLevel(Level.FINE); for(Handler handler : logger.getParent().getHandlers()){ handler.setLevel(Level.FINE); } logger.log(Level.WARNING,"WARNING 信息"); logger.log(Level.INFO,"INFO 信息"); logger.log(Level.CONFIG,"CONFIG 信息"); logger.log(Level.FINE,"FINE 信息"); } }
5.标准API提供了几个操作类:其中
MemoryHandler
不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标Handler
。StreamHandler
可自行指定信息输出时使用的OutputStream
。ConsoleHandler
创建时,会自动指定OutputStream
为System.err。SocketHandler
创建时可以指定主机位置与端口。 -
API增强功能
1.在JDK8中,String
新增了join()
静态方法可以直接指定每个字符串间以逗号分隔进行连接。
2.JDK8中,针对大型数组的平行化操作,在Arrays上新增了parallelPrefix()
、parallelSetAll()
与parallelSort()
方法,parallelSort()
方法。
3.parallelPrefix()
方法,可以指定×××BinaryOperator
实例。
4.parallelSetAll()
方法,可以用来对数组进行初始化或者全面重设每个索引元素。
5.parallelSort()
方法,可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序。
6.Stream
是JDK8中重要的新特性之一。Files
上有几个静态方法,例如lines()
、list()
、walk()
等方法,对于这类返回Stream
实例的API,主要可适用于需要管线化、惰性操作的场合。
7.如果想对数组进行管线化操作,方法之一是使用Arrays
的asList()
方法返回List
,而后调用stream()
方法取得Stream实例,另一个方法是使用Arrays
的stream()
方法,它可以指定数组后返回Stream
实例。
教材学习中的问题和解决过程
-
p471
LoggerDemo
为什么不会输出Level.CONFIG
和Level.FINE
的信息?
Logger
的层级必须大于等于父Logger
,才能将信息输出至控制台,Logger
层级默认为INFO
,Level.CONFIG
和Level.FINE
都小于INFO
,所以不会输出 -
对数组进行管道化操作的方式有哪些?
方法之一是使用Arrays
的asList()
方法返回List
,而后调用stream()
方法取得Stream
实例。另一个方式是使用Arrays
的stream()
方法,它可以指定数组后返回Stream
实例。
代码调试中的问题和解决过程
java.util.regex.Pattern
实例是规则表示式在JVM中的代表对象,Pattern
的构造函数被标示为private
,所以你无法用new
创建Pattern
实例,而必须通过Pattern
的静态方法compile()
来取得。
代码托管
上周考试错题总结
-b
是以八进制输出。- JDK8中新时间API中,用于度量时间的类:
Duuration
,Period
。 - UML类图有助于我们查看程序中类的内容和他们之间的关系。
- 当应用到实例变量时,private可见性修饰符强制执行封装。
结对及互评
-
学习内容
-
MemoryHandler
不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标Handler
。 -
StreamHandler
可自行指定信息输出时使用的OutputStream
实例,它与子类都会使用指定的Formatter
格式化信息。 -
ConsoleHandler
创建时,会自动指定OutputStream
为System.err
,所以日志信息会显示在控制台。 -
FileHandler
创建时会建立日志输出时使用的FileOutputStream
,文档位置与名称可以使用模式字符串指定。 -
SocketHandler
创建时可以指定主机位置与端口,内部将自动建立网络联机,将日志信息传送至指定的主机。 -
Logger
可以使用addHandler()
新增Handler实例,使用removeHandler()
移除Handler
。
结对照片
点评过的同学博客和代码
其他(感悟、思考等,可选)
- java的核心知识与难点之前都已经学完了,后面的章节全都是介绍一些类的应用。看第一遍教材的时候肯定觉得陌生,难以接受。这是个过程,很正常。
- 之前娄老师说过,java的核心内容是封装、继承、多态那部分知识,确实比较抽象难懂。之后的内容都是介绍各种API的应用,都是活生生的例子,比较具体,如果觉得难那是因为对这部分知识感到陌生,不熟悉。自己首先理清头绪,不懂的基础知识多看几遍书,然后再多敲几遍代码,仔细思考总结,将代码与知识点结合,感觉立马就上来了!要讲究科学的学习方法~不要盲目!!!。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/10 | |
第二周 | 100/100 | 2/2 | 19/25 | |
第三周 | 200/278 | 1/3 | 10/26 | |
第四周 | 660/938 | 1/4 | 10/36 | |
第五周 | 1100/2100 | 1/5 | 18/54 | |
第六周 | 740/2840 | 1/6 | 23/77 | |
第七周 | 352/3192 | 2/8 | 20/97 | |
第八周 | 631/3805 | 1/9 | 20/117 |
-
计划学习时间:30小时
-
实际学习时间:20小时
-
改进情况:自己动手敲了比平时要多的代码,意识到了自主学习的重要性。
参考资料
无0.0