静态代码块: 在类加载时执行,执行优先级高于非静态的初始化块,只能初始化成员变量(即static修饰的)
static {
// 语句...
}
非静态代码块:在每个对象生成时都会被执行一次,可以初始化类的实例变量,并且在构造函数之前执行
{
// 语句...
}
简单来说,初始化块就是构造器的补充,初始化块是不能接收任何参数的,对类中所欲对象处理完全相同,所以在定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了。
举个栗子
// 定义一个类
public class TempStatic {
//自定义变量
public int num=0;
//创建的一个对象但是并没有实例化, 把实例化交给非静态初始化块
public TempStaticOne temp;
//非静态初始化块
{
System.out.println("我是非静态初始化块..");
this.num=1;
this.temp = new TempStaticOne();
}
//静态初始化块
static{
System.out.println("我是静态初始化块...");
}
//构造函数
public TempStatic(){
System.out.println("我是构造方法..");
}
//自定义方法
public void Show(){
System.out.println("变量最终结果为:"+num);
}
}
//测试代码块
public class test {
public static void main(String[] args) {
TempStatic ts = new TempStatic();
ts.Show();
}
}
//执行结果
我是静态初始化块...
我是非静态初始化块..
我是构造方法..
变量最终结果为:1
看出执行顺序了吧!