C和Java程序中,一对花括号将多行代码封装在一起的程序段称为代码块。按照位置和修饰符将Java程序代码块分为3种:①普通代码块,成员方法中的代码块称为普通代码块;②构造块,类中的代码块称为构造块;③静态构造块,static修饰的构造块称为静态构造块。
声明和构造代码块
语法格式
class 类名 {
//定义数据成员
{ //构造块
语句块;
}
static{
语句体块
}
//类体其他语句
}
案列展示
package jsu.luca.com;
public class chapter2 {
private String slogan = "* 吃饭当节俭,粒粒皆辛苦! *";
//私有数据成员
private static String info = " * 一个静态成员 *";
// 私有静态成员数据
static int staticNum = 1;//静态构造块运行次数
static int commNum = 1;//构造块运行次数
static {//静态构造块
System.out.println( "* 静态构造块运行次数:"+chapter2.staticNum +" *");
System.out.println(chapter2.info);//输出静态成员
chapter2.staticNum ++;//静态构造块运行次数+1
}
{//构造块
System.out.println( "* 构造块运行次数:"+chapter2.commNum +" *");
System.out.println(chapter2.info);//输出静态成员
System.out.println(this.slogan);//输出非静态成员
System.out.println( "* 构造块结束 *");
chapter2.commNum ++;//构造块运行次数+1
}
private chapter2 (){//构造方法
System.out.println( "* 调用构造方法 *");
}
}
public class Demo {
public static void main (String [] args) {
new chapter2 ();//创建匿名对象
System.out.println("\n====注意!下面没有执行静态构造块!");
new chapter2 ();//创建匿名对象
}
}
JVM加载类时仅执行一次静态构造块,如果类体中包含多个静态构造块,JVM按照它们在类体的顺序依次执行,每个静态构造块仅被执行一次。每次实例化对象时,JVNM按照构造块出行的顺序依次加载,即每个构造块将被加载多次。
实例化对象是JVM加载静态构造块、构造块和构造方法流程如下