package cn.edu.tju.test;
import java.util.Random;
public class InterfaceInitTest {
public static void main(String[] args) {
System.out.println(MyInterface1.a);
System.out.println(MyInterface2.b);
}
}
interface MyInterface1{
int a=2023;
}
interface MyInterface2{
int b = new Random().nextInt();
}
接口MyInterface1不被初始化,因为a的修饰符实质为public static final.
接口MyInterface2会被初始化,因为编译时无法确定b的值
package cn.edu.tju.test;
public class InitTest2 {
public static void main(String[] args) {
System.out.println(MySubClass.a);
}
}
interface MyParentInterface{
public static Thread t= new Thread(){
{
System.out.println("create a thread");
}
} ;
}
class MySubClass implements MyParentInterface{
public static int a=2023;
static {
System.out.println("in my parent class");
}
}
运行输出
没有输出create a thread,说明接口没被初始化
package cn.edu.tju.test;
public class InitTest3 {
public static void main(String[] args) {
System.out.println(MySubInterface3.t);
}
}
interface MyParentInterface3{
public static Thread t= new Thread(){
{
System.out.println("create a thread: My parent interface 3");
}
} ;
}
interface MySubInterface3 extends MyParentInterface3{
public static Thread t= new Thread(){
{
System.out.println("create a thread: My sub interface 3");
}
} ;
}
运行输出:
初始化接口时,并不会初始化父接口。
初始化类时,不会初始化其实现的接口。
初始化类时,会先初始化父类