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