Java “什么是”呢;“记录器”;在爪哇?
我在课堂上看到了以下几点:Java “什么是”呢;“记录器”;在爪哇?,java,oop,methods,logging,Java,Oop,Methods,Logging,我在课堂上看到了以下几点: this.logger.severe(""); this.logger.warning(""); this.logger.info(""); 有几件事我不明白: 我们如何使用之前未定义的方法?我的意思是,类中没有定义“logger”方法。我认为可以定义这些方法,因为所考虑的类是定义了“logger”的另一个类的扩展。但是在类的定义中没有“extends”语句(只有“implements”) 我可以理解这样的事情:“objectName.methodName”。但是“
this.logger.severe("");
this.logger.warning("");
this.logger.info("");
有几件事我不明白:
import java.util.logging.Logger代码>
然后在类中我有:private Logger=Logger.getLogger(“a.b.c.d”)
因此,logger是类logger的一个对象(但我不明白为什么他们不能用“new logger()”以常规方式实例化该类)。我也不明白logger.severe(“”)到底做了什么
“logger”将是另一个对象,而不是方法。此logger类将在其上定义方法,如public void severe(String message)
“something1”将是“objectName”中包含的对象。例如,Car.Engine.cyline.Fire()
,使用这样的方法来点燃汽车的钢瓶被认为是不好的做法,您应该执行类似于Car.StartEngine()
(有关更多信息,请参阅)
记录器将记录程序中发生的情况,因此如果以后出现崩溃或错误,您可以查看发生的情况。是否将其记录到文本文件或某个数据库中,将取决于记录器的实现
logger不是一个方法,而是一个类变量,它似乎是一个公开方法“严重”、“警告”和“信息”的对象
检查您的类是否有类似“someClass logger=new someClass()”;"
记录器通常指的是中类的用法
记录器是一个成员对象,其函数(例如severe)被调用
记录器通常登录到一个文件中(可以通过log4j.xml或其他配置文件或在程序启动期间进行配置)
编辑:更改了log4j链接。记录器没有做任何特殊的事情。它只是Java代码
public class SomeClass {
private Logger logger = LogFactory.getLogger(SomeClass.class);
public void doSomething() {
this.logger.debug("foo");
}
}
this.logger
仅指向当前实例(this
)的名为logger
的实例变量。this.
前缀在本例中是superflous。您也可以在此处执行logger.debug(“foo”)
如果它没有在SomeClass
本身中声明,那么它很可能是在扩展类中声明的。请检查在extends
中声明的类
至于你的objectName.something1.something2
疑问,你已经看过System.out.println()了吗
有效?返回一个PrintStream
对象,该对象又有一个方法。因此,如果objectName.something
返回一个具有方法的完整对象,则您可以继续链接方法调用
基本上
objectName.something1.something2;
可以翻译为
SomeObject someObject = objectName.something1;
someObject.something2;
但是,如果您不需要someObject
代码中的任何其他地方,那么它可以像您的示例中那样缩短
更新:根据您的更新:
所以,logger是类logger的一个对象(但我不理解为什么他们不能用“new logger()”以常规方式实例化该类)。我也不明白logger.severy(“”)到底是做什么的
。至于为什么它不能被实例化,这是因为
更新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.
}
}
java.util.Logger类是java日志API的主要访问点。以下是创建记录器的方法:
Logger logger = Logger.getLogger("myLogger");
作为参数传递给getLogger()工厂方法的字符串是要创建的记录器的名称。您可以自由选择名称,但名称表示记录器在记录器层次结构中的位置。每一个名称中的(点)被解释为层次结构中的分支。回答2。方法名称不能包含点。点的意思总是“左边的东西是有成员的对象,右边的东西是我想访问的成员”。因此,如果此代码进行编译,logger
是对对象的引用,该对象具有名为severe
等方法。@divo:this
@BalusC无法访问静态字段,请按我不理解的方式购买。我的意思是,如果我只使用字段名,默认情况下,它不是这个对象的字段吗?我知道“this.x”和“x”有什么区别吗?是这样的吗?如果我看到类似“aaa.bbb.ccc()”的内容,我可以说ccc()是“aaa.bbb”的方法,因此,“aaa.bbb”是一个对象。因此,在类“aaa”中,我不应该搜索名为“bbb”的方法。相反,我需要搜索类“aaa”中定义的字段“bbb”。非常详细的解释