引入包import org.apache.log4j.Logger;
protected static Logger LOG=Logger.getLogger(myclass.class);
若是去掉static,那每个类对象就返回一个Logger类,增加了开销
getLogger(" ")中的字符串写什么都行,只是打印日志的时候会显示出来
protected static Logger LOG=Logger.getLogger(myclass.class);
和protected static Logger LOG=Logger.getLogger(this.getClass());的区别
this表示当前对象的引用
getClass()是java.lang.Object中的方法,他返回一个对象的运行时类
获得一个Logger对象,将这个Logger监视this.getClass这个运行时类
这个运行时类里面你可能创建了log,info()等
那这些语句就会根据你预先定义的Logger级别来输出你的日志
Logger.getLogger(this.getClass())这样写,好处是只需要在基类中写一行代码就可以了
子类可以直接使用,这也是复用的原则
总结:this.getClass()是获取当前正在运行的类
myclass.class和myclass.getClass()的区别
public final native Class<?> getClass();
xx.class是程序运行时就加载到jvm中的
xx.getClass()是程序运行时动态加载的
native表示该方法的实现是通过jvm之外的代码来实现
.class是一个静态常量
.getClass()是一个普通的成员函数
所以,
类名.class
类创建的对象.getClass()
因此,一个是通过类找到class对象,一个是通过类的实例对象找到class对象
myclass.class字段是编译器在编译myclass类时,自动加上去的,这个class是静态的、不可变的
myclass.getClass()是对象级别的,需要由myclass的对象进行调用
编译器自说自话的给类或对象加上额外的字段
除了class之外,还有数组的length也是这样
protected Logger logger=LoggerFactory.getLogger(class<?>)
参数中可以使用两种方法
LoggerFactory.getLogger ( getClass( ) )
这个class中的logger可以被每个子类共用,而不需要每个子类都写一句LoggerFactory.getLogger(someclass.class)
因为getClass是一个可复写的方法,提供了灵活性
所以能用getClass()就用,不能用的时候就class
因为如果子类继承了父类中logger对象是采用getClass()来获取类时
此时返回的是子类的类名
logger.getClass().getName() 通过对象获取类名
Class.forName("包.类名称")也是一种访问class的方法