目录
2. private final vs private static final
1. 使用Logger与@Slf4j
使用@Slf4j需要引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
然后就可以用:
log.debug("debug");//默认日志级别为info
log.info("info");
log.error("error");
log.warn("warn");
这就相当于省略了
private static final Logger logger = LoggerFactory.getLogger(xxx.class);
//这个xxx是类的名字
这里在提一下static final 和 final的区别
对于修饰变量的话
static :被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
final成员变量表示常量,只能被赋值一次,赋值后不能再被改变。
final类不能被继承,没有子类,final类中的方法默认是final的
2. private final vs private static final
static 强调只有一份,final 说明是一个常量,final定义的基本类型的值是不可改变的(注意是基本变量不可以变!)fianl定义的引用对象的值是可以改变的
3、为什么使用final方法呢?
原因有两个。其一是把方法锁定,确保在继承中使用方法行为不变,并且不会被覆盖;
其二是效率,如果一个方法指明为final,就是同意编译器将针对该方法的所有调用都转为内嵌调用。 转为内嵌调用的目的是节省开销,因为编译器发现一个final方法调用命令时,会跳过程序代码这种正常方式而执行方法调用机制(将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的实际代码的副本来替代方法调用。但是如果一个方法很大,程序很膨胀,就会看不到内嵌带来的任何性能的提高。
4、final和private关键字
类中所有private方法都隐式地指定为是final的,因为private关键字只能被本类调用,其他类中的方法也无法覆盖private修饰的方法,因此和加上final效果是一样的。
5.Log4j与之对比
不同的日志库如java.util.logging、Apache log4j、logback
SLF4J(Simple logging facade for Java)
这个是一种抽象日志层的理念,提供了基于占位符的日志方法!
反正好用就完事了