jvm复习: 接口初始化

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");
        }
    } ;



}

运行输出:
在这里插入图片描述
初始化接口时,并不会初始化父接口。
初始化类时,不会初始化其实现的接口。
初始化类时,会先初始化父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值