这种说法是错误的,因为接口的field是static final 声明final的至少初始化一次 声明static不能在实例化的时候初始化(也就是构造器也不能初始化它) 而且接口又没static块,所以必须在声明的时候就初始化它
按你们的想法在 Eclipse 里面试验一下,我觉得 Eclipse 最专业,它出错最少(当然我也发现过一次它在包内可见的类的查找上出错,不过只是Eclipse JDT 的问题不是编译器的问题,因为它还是可以编译通过的)。这是技术上的。另外说概念上的,接口只描述功能而不提供任何实现,这才是它的正确用途(当然你可以在一个常量初始化时定义另外一个匿名内部类,这不算接口本身实现)。我可以写出下面这样的,但这个 A 实现了 Int 但不是 Int 本身提供了实现代码: public interface Int { public static final Int A = new Int() { }; }
public interface Test { public final static int i;
static { i = 3; } }public class Test { public final static int i; static { i = 1; } }楼主认为interface可以这样初始化?
如果没有这个规定,方法的形式参数就没有办法是final的了。
类的final属性可以不立即初始化。等用的时候再初始化,也就是在构造方法中对其初始化。
方法中的final变量也可以不立即初始化,用的时候再初始化。只能初始化一次。
声明final的至少初始化一次
声明static不能在实例化的时候初始化(也就是构造器也不能初始化它)
而且接口又没static块,所以必须在声明的时候就初始化它
public interface Int {
public static final Int A = new Int() {
};
}
public interface Test {
public final static int i;
static {
i = 3;
}
}public class Test {
public final static int i;
static {
i = 1;
}
}楼主认为interface可以这样初始化?