jafer 2008-08-07 20:33
浏览 216
已采纳

Logger的问题?

[size=large]
请javaeye的同仁帮我解释一下:
private Logger log=Logger.getLogger(this.getClass());
这句代码有什么作用。
我不懂,this.getClass()得到什么?
Logger.getLogger(this.getClass())又得到什么,这样写,有什么好处?[/size]

  • 写回答

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对象所用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!