由於下面的類Log4jImpl,我想知道它的'初始化(類初始化不是對象),是否會導致org.apache.log4j.Level
和org.apache.log4j.Logger
被初始化?類初始化檢查它的成員方法嗎?
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class Log4jImpl{
private static final String FQCN = Log4jImpl.class.getName();
private Logger log;
public Log4jImpl(String clazz) {
log = Logger.getLogger(clazz);
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public boolean isTraceEnabled() {
return log.isTraceEnabled();
}
public void error(String s, Throwable e) {
log.log(FQCN, Level.ERROR, s, e);
}
public void error(String s) {
log.log(FQCN, Level.ERROR, s, null);
}
public void debug(String s) {
log.log(FQCN, Level.DEBUG, s, null);
}
public void trace(String s) {
log.log(FQCN, Level.TRACE, s, null);
}
public void warn(String s) {
log.log(FQCN, Level.WARN, s, null);
}
}
從「specs」中,我看到「使用T聲明的靜態字段並且該字段不是常量變量」。但是Level.ERROR,Level.DEBUG等是「public static final」字段。如何解釋? – duanjfeng 2013-05-12 12:01:52
@duanjfeng是的,但是如果你看源代碼,常量初始化爲:'public static final ERROR = new Level()' – dcernahoschi 2013-05-12 14:54:16
你的意思是Log4jImpl類嘗試解析這些常量,但它們是class Level,讓jvm嘗試加載類Level? (你會告訴我更多的官方參考,我可以讀到這個?) – duanjfeng 2013-05-12 15:10:11