Rom*_*man 9 java oop methods logging
我有一节课,其中我看到以下内容:
this.logger.severe("");
this.logger.warning("");
this.logger.info("");
Run Code Online (Sandbox Code Playgroud)
我不明白几件事:
我们如何使用之前未定义的方法?我的意思是,课堂上没有定义"记录器"方法.我认为可以定义这些方法,因为所考虑的类是另一个定义了"logger"的类的扩展.但是在类的定义中没有"扩展"语句(只有"实现").
我可以理解这样的事情:"objectName.methodName".但那是什么"objectName.something1.something2"?"something1.something2"是方法的名称?方法名称可以包含点吗?
究竟这些"记录器.*"到底是什么?我认为他们保存了有关代码执行的信息.他们写了关于执行期间发生的事情的报告.但在哪里可以找到这些信息?
添加:
在文件的开头我有:import java.util.logging.Logger;
然后在课堂上我有:private Logger logger = Logger.getLogger("a.b.c.d");
所以,logger是Logger类的一个对象(但是我不明白为什么他们不能使用"new Logger()"以通常的方式实例化类.我也不明白logger.severe("")到底做了什么.
Bal*_*usC 13
记录器没有任何特殊之处.这只是Java代码.
public class SomeClass {
private Logger logger = LogFactory.getLogger(SomeClass.class);
public void doSomething() {
this.logger.debug("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
在this.logger刚刚指向命名实例变量logger(当前实例的this).this.在这个例子中,前缀是超级丰富的.人们也可以在logger.debug("foo")这里做.
如果它没有在SomeClass自身中声明,那么它很可能在扩展类中声明.检查声明的类extends.
至于你的objectName.something1.something2疑问,你已经看过它的System.out.println()作用了吗?所述System.out返回一个PrintStream对象,该对象反过来又一个println()方法.因此,如果使用方法objectName.something返回fullworthy Object,那么您可以继续链接方法调用.
基本上,
objectName.something1.something2;
Run Code Online (Sandbox Code Playgroud)
可翻译为
SomeObject someObject = objectName.something1;
someObject.something2;
Run Code Online (Sandbox Code Playgroud)
但是,如果您不需要someObject代码中的任何其他位置,那么它可以像您的示例中那样缩短.
更新:根据您的更新:
因此,记录是记录器类的一个对象(但我不明白为什么他们不能用通常的方式实例化类"新记录器()).我也想不明白到底是什么logger.severe("")做.
只需阅读相关课程的javadoc即可.至于为什么它不能被实例化,这是因为工厂模式.
更新2:根据另一个混淆:
我不明白为什么他们使用"这个".我的意思是,如果我只使用字段名称,默认情况下它不会是该对象的字段吗?我在"this.x"和"x"之间有什么区别吗?
通过这种方式,您可以更明确地了解您要访问的是哪一个.如果方法包含例如参数或具有名称的局部变量logger,那么this.logger仍然会引用实例变量.
public class SomeClass {
private Logger logger = LogFactory.getLogger(SomeClass.class);
public void doSomething(Logger logger) {
this.logger.debug("foo"); // Refers to the instance variable.
logger.debug("foo"); // Refers to the method argument.
}
public void doSomethingElse() {
Logger logger = LogFactory.getLogger(SomeClass.class);
this.logger.debug("foo"); // Refers to the instance variable.
logger.debug("foo"); // Refers to the method local variable.
}
}
Run Code Online (Sandbox Code Playgroud)