static final修饰的常量分为两种 一种是在编译器能够确定的比如public static final String iField2 = "heihie";这种常量在编译期会放进常量池中,当使用到该常量时不会触发类的初始化 第二种是只有在运行期能够确定的比如public static final String uuid = UUID.randomUUID().toString();这种常量不运行是肯定不知道他的值的,所以在编译期也不可能放进常量池中(值都不知道还怎么放进去),当使用到该常量时会发出类的初始化。 然后你提问的第一句话一个接口在初始化时,并不要求其父接口全部都完成了初始化,只有在真正使用到父接口的时候(如引用接口中定义的常量)才会初始化这里的常量指上面的第二种。第二句话final修饰的常量在编译阶段会存入调用类的常量池中,实际上并没有直接引用定义常量的类,因此不会出发定义常量的类的初始化这里的常量指的是上面的第一种。
点赞 1

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务