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条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器