static的常量在类加载的时候被初始化,而实例常量在实例化的时候被初始化。
静态代码块
所谓的代码块是指用“{}”括起来的一段代码,可分为:普通代码块,构造快,静态代码块,同步代码块;
普通代码块:直接在方法或语句中定义的代码块。
构造块:直接写在类中的代码块。
静态代码块:使用static关键字声明的代码块。
实例:
class Demo {
// 定义构造块,在类里面必须加{}
{System.out.println("2、构造块");}
// 定义类中的静态代码块
static{System.out.println("1、类中的静态代码块");}
// 定义构造方法
public Demo(){
System.out.println("3、构造方法");
}
}
public class CodeDemo {
// 定义主方法所在类中的静态块
static{System.out.println("0、主方法所在类中的静态块");}
public static void main(String[] args) {
new Demo();
new Demo();
new Demo();
}
}
输出结果:
0、主方法所在类中的静态块
1、类中的静态代码块
2、构造块
3、构造方法
2、构造块
3、构造方法
2、构造块
3、构造方法
由此可以看出,主方法所在类中的静态代码块优先于主方法执行,类中定义的静态代码块优先于构造块执行,不管有多少个对象产生,静态代码块只执行一次。