20145110 《Java程序设计》第八周学习总结
20145110 《Java程序设计》第八周学习总结
教材学习内容总结
15.1日志
15.1.1日志API简介
- Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,,要取得Logger实例,必须使用Logger的静态方法getLogger()。
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 讯息");
}
}
15.1.2指定日志层级
- 在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL_LOGGER_NAME名称空间Logger实例设定的Level.INFO,才可能输出信息。
在java中负责日志输出的是Handler实例,Logger可以使用addHandler()新增handler实例,使用RomoveHandler移除实例,书中有一个程序范例,可以将目前Logger与新建的FileHandler层级设定Level.CONFIG,并使用addHandler()设定至Logger实例:
import java.io.IOException;
import java.util.logging.*;
public class HandlerDemo {
public static void main(String[] args) throws IOException {
Logger logger = Logger.getLogger(HandlerDemo.class.getName());
logger.setLevel(Level.CONFIG);
FileHandler handler = new FileHandler("%h/config.log");
handler.setLevel(Level.CONFIG);
logger.addHandler(handler);
logger.config("Logger 组装完成");
}
}
import java.time.Instant;
import java.util.logging.*;
public class FormatterDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger(FormatterDemo.class.getName());
logger.setLevel(Level.CONFIG);
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.CONFIG);
handler.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
return "日志來自 " + record.getSourceClassName() + "."
+ record.getSourceMethodName() + "\n"
+ "\t层级\t: " + record.getLevel() + "\n"
+ "\t讯息\t: " + record.getMessage() + "\n"
+ "\t时间\t: " + Instant.ofEpochMilli(record.getMillis())
+ "\n";
}
});
logger.addHandler(handler);
logger.config("自订 Formatter 讯息");
}
}
15.1.5使用logging.Filter
可以通过logging.properties来设定Logger组态,启动JVM时,指定java.util.logging.config.file系统属性为.propertiles名称。
15.3规则表示式
- 规则表达式简介:如果我想根据某个字符串或字符进行切割,可以使用String的split()方法,它会返回切割后各子字符串组成的String数组。就像下面的程序:
import static java.lang.System.out;
public class SplitDemo {
public static void main(String[] args) {
// 根据逗号切割
for(String token : "Justin,Monica,Irene".split(",")) {
out.println(token);
}
// 根据Orz切割
for(String token : "JustinOrzMonicaOrzIrene".split("Orz")) {
out.println(token);
}
// 根据Tab字元切割
for(String token : "Justin\tMonica\tIrene".split("\\t")) {
out.println(token);
}
}
}
JDK8API增强功能:
1.如果我们有一组字符串,我们想要指定每个字符串之间以“,”进行分隔,现在,我们可以使用String新增的join()静态方法。
2.对于数组操作,在JDK8中针对大型数组的平行化操作,在Arrays上新增了parallelPrefix(),ParallelSetall()与parallelSort()方法。
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/2 | 20/20 | |
第二周 | 300/500 | 1/3 | 18/38 | |
第三周 | 500/1000 | 1/4 | 22/60 | |
第四周 | 300/1300 | 1/5 | 30/90 | |
第五周 | 300/1600 | 1/6 | 30/160 | |
第六周 | 700/2300 | 2/7 | 30/190 | |
第七周 | 400/2700 | 2/9 | 30/220 | |
第八周 | 400/3100 | 2/11 | 30/250 |