有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java输入记录器。静态块中的信息

我有以下课程

public class MyClass
{
    private static final Logger logger = Logger.getLogger(MyClass.class);

    static
    {
        logger.info("some text");
    }
}

可以安全地假设,当我们到达logger.info时,log4j系统已经初始化并准备好发出日志了吗

似乎如果我能够执行Logger.getLogger()并返回一个有效的记录器实例,这意味着Log4j已初始化,对吗


共 (2) 个答案

  1. # 1 楼答案

    JLS的这一部分。它讨论初始化类时会发生什么This部分讨论静态初始化器。在回答您的问题时,请注意,静态块是按照它们出现的顺序执行的。它们将在类加载时执行,这可能发生在您创建它的实例或访问它的静态var/方法时

  2. # 2 楼答案

    是的。静态初始值设定项(即static {}块和静态变量的初始赋值)按声明顺序执行

    log4j的默认初始化依赖于log4j类LogManager中的静态块,该静态块在Logger类加载后执行,并且在首次使用之前加载。这就是为什么你的建设工程