Java Static静态代码块

本文讨论了Java中静态初始化块和静态变量的执行顺序,澄清了一个常见误解,即静态变量总是先于静态初始化块执行。通过一个示例代码,解释了正确的执行流程,指出初始化块会先于变量赋值执行,并展示了如何得出最终的变量值。最后,列出了类成员和初始化块的执行顺序规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	public class Test{    
	static int cnt = 6;    
	static{
        cnt += 9;    
        }   
    public static void main(String[] args){        System.out.println(“cnt =+ cnt);    
        }    
        static{
                cnt /=3;    
                };
        }

cnt的值是 A
A、cnt=5
B、cnt=2
C、cnt=3
D、cnt=6

静态初始化块,静态变量这两个是属于同一级别的,是按代码写得顺序执行的!
而不是先执行静态变量后执行静态初始化块!这是错的。举例:
public class Test {
static {
cnt = 6;
}
static int cnt = 100;
public static void main(String[] args) {
System.out.println("cnt = " + cnt);
// 最后输出是50,如果按照错误说法就应该是3
// 按顺序执行就是cnt=6—>cnt=100---->cnt = 100/2 = 50.
}
static {
cnt /= 2;
}
}

问题:为什么cnt变量的声明放在了后面不报错?
static {
cnt = 6;
}
static int cnt = 100;

(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。

在这里插入图片描述在这里插入图片描述User.User
Person.static initializer
Student.static initializer
Person.instance initializer
Person.Person
Student.instance initializer
Student.Student

在这里插入图片描述答案:CBB
解析:先执行父类实例变量得到C
在执行父类构造方法得到B
在执行子类构造方法得到B
父类中的无参构造方法没有被调用,不用管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值