如何判断接口是否被初始化

2019-07-10  本文已影响0人  编码之路从零开始
public interface IDao {

    Thread thead = new Thread(){
        {
            System.err.println("IUserDao is init");
        }
    };
}

{ }static{ } 对比
{ }包括的代码块,会在每次实例化对象的时候执行一次
而被static{ }包括的代码块,会在类初始化的时候执行一次

根据java语言的特性,

  1. 接口中的变量默认添加了public static final
  2. 接口中的方法默认添加了public abstract

java语言中abstractstaticfinal 是不能共存的

有了以上两点作为前提,再根据 常量传播优化 所以只要IDao 接口被初始化,就会执行输出语句。

常量传播优化:被 static final 关键字修饰的变量(也就是可以确定值且该值不会再运行期间改变的变量,比如不包括UUID)会在编译期间将该变量初始化并存储到引用该变量的类的常量池中。

上一篇 下一篇

猜你喜欢

热点阅读