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

参考资料

posted on 2016-04-24 21:09  20145110  阅读(117)  评论(1编辑  收藏  举报