案例1.main方法在静态变量所有类的内部
public class Person {
public static int a = 10;
public final static int b=20;
public Person(){
System.out.println("构造方法执行了");
}
//成员代码块 构造代码块
{
System.out.println("构造代码块执行了");
}
//静态代码块
static{
System.out.println("静态代码块执行了");
}
public static void main(String[] args) {
//判断调用未用final修饰的静态变量
//System.out.println(Person.a);
//判断用final修饰的静态常量
System.out.println(Person.b);
}
}
屏蔽//System.out.println(Person.a);输出结果:静态代码块执行了
20
屏蔽//System.out.println(Person.b);输出结果2:静态代码块执行了
10
结论1:
当main方法在静态变量所有类的内部时,无论调用被static修饰的变量还是用final static修饰的变量,静态代码块都会被调用。
案例2.使用测试类的main方法来访问静态变量/常量。
新定义Test类,调用其main方法来测试案例二
public class Person {
public static int a = 10;
public final static int b=20;
public Person(){
System.out.println("构造方法执行了");
}
//成员代码块 构造代码块
{
System.out.println("构造代码块执行了");
}
//静态代码块
static{
System.out.println("静态代码块执行了");
}
}
public class Test {
public static void main(String[] args) {
//判断用一般的静态变量
//System.out.println(Person.a);
//判断用final修饰的静态常量
System.out.println(Person.b);
}
}
屏蔽//System.out.println(Person.a);
输出结果:
20
屏蔽//System.out.println(Person.b);
输出结果:
静态代码块执行了
10
结论2:
当访问类中常量的时候,并不调用静态代码块的数据,此时类并没有被加载进内存。
当访问类中静态变量的时候,调用静态代码块的数据,此时类被加载进内存。