[size=large]
请javaeye的同仁帮我解释一下:
private Logger log=Logger.getLogger(this.getClass());
这句代码有什么作用。
我不懂,this.getClass()得到什么?
Logger.getLogger(this.getClass())又得到什么,这样写,有什么好处?[/size]
Logger的问题?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- piccbj 2008-08-09 14:51关注
this.getClass()得到什么?
this 表示当前对象的引用;
getClass() 是 java.lang.Object 中的方法,它返回一个对象的运行时类;
this.getClass() 就是返回当前对象的运行时类。Logger.getLogger(this.getClass())又得到什么?
他得到一个Logger对象,这个Logger将监视this.getClass()这个运行时类,这个运行时类里面你可能创建了log.info(""), log.debug(""),……等语句,那么这些语句就会根据你预先定义的Logger级别来输出你的日志。就跟你写System.out.print("")一样,不同的是Logger可以根据需要按级别进行日志输出控制。(当然这只是一方面)Logger.getLogger(this.getClass())这样写,有什么好处?
这样一来你只需要在基类中写一行代码就可以了,子类可以直接使用,这也是复用的原则。
如果你有一个类A,你可以在A类的开始这么写
Logger log=Logger.getLogger(A.class)
这就定死了这个Logger只监视A类本身如果B类继承A类,你创建B类对象时,上面创建的log对象对B是不起作用的。这就就是hard code.而Logger.getLogger(this.getClass())就不同,你创建B对象时,this就是B对象的引用了,见下列代码:
[code="java"]
package com.zhaipuhong.j2se.keywords;public class ThisKeywordsA {
protected String className = this.getClass().toString();public ThisKeywordsA(){ System.out.println("ThisKeywordsA className == " + className); }
}
package com.zhaipuhong.j2se.keywords;
public class ThisKeywordsB extends ThisKeywordsA{
public ThisKeywordsB(){ System.out.println("ThisKeywordsB className == " + className); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ThisKeywordsB b = new ThisKeywordsB(); }
}
[/code]
运行结果:
ThisKeywordsA className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
ThisKeywordsB className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB由于B继承A,A对象首先被创建(请不要考虑抽象类和接口^_^)然后作为B对象的字对象创建B 对象. 此时的Logger就是B对象的一部分,可以为B对象所用。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!