类的初始化代码示例

文章讲述了Java中静态变量在子类继承和数组创建时的初始化规则,包括父类静态变量先于子类静态变量赋值,以及数组元素的初始化仅针对元素类型而非元素实例。
摘要由CSDN通过智能技术生成

示例一:

public class Demo02 {
    public static void main(String[] args) {
        new B02();
        System.out.println(B02.a);
    }
}

class A02 {
    static int a = 0;

    static {
        a = 1;
    }
}

class B02 extends A02 {
    static {
        a = 2;
    }
}

运行结果为:2

new B02()方法会优先初始化父类A02,执行A02静态变量的赋值,此时a=0,再执行A02的静态代码a=1,再执行子类的静态代码块,此时a=2

示例二,将new B02()去掉

public class Demo02 {
    public static void main(String[] args) {
//        new B02();
        System.out.println(B02.a);
    }
}

class A02 {
    static int a = 0;

    static {
        a = 1;
    }
}

class B02 extends A02 {
    static {
        a = 2;
    }
}

运行结果为:1

直接访问父类的静态变量,不会触发子类的初始化。

因此只需要执行A02静态变量的赋值,此时a=0,再执行A02的静态代码a=1,不再执行子类的静态代码块

示例三

public class Test2 {
    public static void main(String[] args) {
        Test_2[] a = new Test_2[10];
    }
}

class Test_2 {
    static {
        System.out.println("Test_2的静态代码块运行");
    }
}

无打印信息

数组的创建不会导致数组中元素的类进行初始化。

示例四

public class Test2 {
    public static void main(String[] args) {
        System.out.println(Test_2.a);
    }
}

class Test_2 {
    public static final int a = Integer.valueOf(1);

    static {
        System.out.println("Test_2的静态代码块运行");
    }
}

输出结果:

Test_2的静态代码块运行
1

final修饰的变量如果赋值的内容需要执行指令才能得出结果,会执行clinit方法进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值