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 "); } }; }输出结果:
102、调用接口的常量:运行期才确定值的常量,会引发接口的初始化。
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 43、初始化一个接口的实现类,不会引发接口的初始化。
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 hello4、初始化一个接口的子接口,不会引发父接口的初始化。
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