jvm-010 接口的初始化
1、调用接口的常量:编译器即可确定的常量,不会引发接口的初始化。
public class TestCode05 {
public static void main(String[] args) {
System.out.println(ParentInterface.a);
}
}
interface ParentInterface {
int a = 10;
Thread thread = new Thread(){
{
System.out.println(" ParentInterface init ");
}
};
}
输出结果:
10
2、调用接口的常量:运行期才确定值的常量,会引发接口的初始化。
public class TestCode05 {
public static void main(String[] args) {
System.out.println(ParentInterface.a);
}
}
interface ParentInterface {
int a = new Random().nextInt(10);
Thread thread = new Thread(){
{
System.out.println("ParentInterface init ");
}
};
}
输出结果:
ParentInterface init
4
3、初始化一个接口的实现类,不会引发接口的初始化。
public class TestCode05 {
public static void main(String[] args) {
System.out.println(ChildClass.str);
}
}
interface ParentInterface {
Thread thread = new Thread(){
{
System.out.println("ParentInterface init");
}
};
}
class ChildClass implements ParentInterface {
public static String str = "hello";
static {
System.out.println("ChildClass init");
}
}
输出结果:
ChildClass init
hello
4、初始化一个接口的子接口,不会引发父接口的初始化。
public class TestCode05 {
public static void main(String[] args) {
System.out.println(ChildInterface.num);
}
}
interface ParentInterface {
Thread thread = new Thread(){
{
System.out.println("ParentInterface init");
}
};
}
interface ChildInterface extends ParentInterface {
public static int num = new Random().nextInt(5);
Thread thread0 = new Thread(){
{
System.out.println("ChildInterface init");
}
};
}
输出结果:
ChildInterface init
4