package com.wyq.study;
public class TestBlock {
//静态属性,在静态区
static int a = 10;
//静态代码块
static {
//局部变量,在栈内存中
int a = 20;
}
//构造代码块
{
//局部变量,在栈内存中
a = 30;
}
public static void main(String[] args) {
System.out.println("进入到了主方法");
System.out.println(a);
TestBlock tb = new TestBlock();
System.out.println(a);
}
}
输出的结果:
进入到了主方法
10
30
原因是:
1、第一次输出是10,因为无论是在刚开始执行,无论是静态代码块还是构造代码块,都是局部变量,只是在很小的范围内,不影响外边的成员变量,更何况局部变量没有任何东西触发执行。
2、第二次输出30是指类加载到对象中的过称之前,a=10,加载过程中,首先触发静态代码块执行,此时a=20,然后后边是触发构造代码块执行,之后a=30。