JAVA静态代码块会在类被加载时自动执行?
一、先看Java静态方法,静态变量
静态代码块
在类中,可以将某一块代码声明为静态的,这样的程序块叫静态初始化段。静态代码块的一般形式如下:
static{
语句序列
}
public classstaticBlock{//定义一个普通的main()方法
public static voidmain(String args[]){
System.out.println("This is main method.");
}//定义一个静态代码块
static{
System.out.println("This is static block.");int stVar = 0; //这是一个局部变量,只在本块内有效
}
}
编译通过后,用java命令加载本程序,会得到如下输出:
This is static block.
This is main method.
从以上输出结果中可以看出,静态代码块甚至在main方法之前就被执行。在main()方法中可以完成的任务在静态代码块中都可以完成。但是二者在执行上仍然有一些区别,main方法是整个程序启动的入口,而静态代码块是存在于某个类中的一个过程。
那是不是只要类被加载了就一定会执行静态代码块?
二、再看JVM类加载的过程
装载
连接
初始化
其中装载阶段又三个基本动作组成:
通过类型的完全限定名ÿ