java中的静态代码块

在类的成员方法之外,用static修饰代码区域可以称之为静态代码块。定义一块静态代码块,可以完成类的初始化操作,在类的声明时就会运行。
语法如下:

public class StaticTest{
static{
	//执行语句
}
}

以下示例为说明静态代码块、非静态代码块、构造方法、成员方法的调用顺序

public class StaticTest{
	static String name;
	//静态代码块
	static{
		System.out.println(name+"静态代码块");
	}

	//非静态代码块
	{
		System.out.println(name+"非静态代码块");
	}

	//构造方法
	public StaticTest(String a){
		name=a;
		System.out.println(name+"构造方法");
	}

	//成员方法
	public void method(){
		System.out.println(name+"成员方法");
	}

	public static void main(String[] args){
		StaticTest s1;//声明时候就已经运行静态代码块
		StaticTest s2=new StaticTest("s2");//new时候才会运行构造方法
		StaticTest s3=new StaticTest("s3");
		s3.method();//只有调用的时候才会运行
	}
}

测试结果:
null静态代码块
null非静态代码块
s2构造方法
s2非静态代码块
s3构造方法
s3成员方法

说明如下:

  1. 静态代码块由始至终只运行一次
  2. 非静态代码块,每次创建对象的时候,会在构造方法之前运行。所以读取name时,只获取到String类型的默认值null
  3. 构造方法只有在使用new创建对象时候才会运行
  4. 成员方法只有在使用对象调用的时候才会运行
  5. 因为name是static修饰的静态成员变量,创建s2对象时将字符串“s2”赋值给name,所以创建s3对象时,重新调用类的非静态代码块,此时name的值还没有被s3对象改变,因此才输出“s2非静态代码块”

猜你喜欢

转载自blog.csdn.net/beyong_78439/article/details/88342509