黑马程序员_代码块

------- android培训java培训、期待与您交流! ----------

构造代码块:
构造块优先于构造方法执行,只要有实例化就有构造块执行,对对象进行统一初始化,构造代码块直接在类中编写。格式:

{
	Code;
}

静态代码块:

static关键字,静态块优先于主方法执行且优先于构造块,不管有多少实例化执行,静态块只执行一次。静态块的主要功能就是为静态属性初始化。格式:

static
{
	Code;
}

举例说明:

class Test
{
	{
		System.out.println("位置1:Test的Constructor Block被自动执行!");
	}

	static	//首先被执行
	{
		System.out.println("位置1:Test类的Static Block被自动调用!");
	}
	public Test()
	{
		System.out.println("Test的构造函数Test()执行!");
	}

	{
		System.out.println("位置2:Test的Constructor Block被自动执行!");
	}

	static
	{
		System.out.println("位置2:Test类的Static Block被自动调用!");
	}
}

public class CodeBlock
{
	CodeBlock()
	{
		System.out.println("CodeBlock的构造函数CodeBlock()执行!");
	}

	{
		System.out.println("位置1:CodeBlock类的Constructor Block被自动执行!");
	}

	static	//运行本程序时,静态代码块会首先自动执行
	{
		System.out.println("位置1:CodeBlock类的Static Block被自动调用!");
	}

	public static void main(String[] args)
	{
		System.out.println("程序开始执行,执行第一个对象!");
		// 产生两个实例化对象
		new Test();
		System.out.println("程序执行第二个对象!");
		new Test();
		System.out.println("程序执行第三个对象!");
		new CodeBlock();
		System.out.println("程序执行第四个对象!");
		new CodeBlock();
	}

	{
		System.out.println("位置2:CodeBlock类的Constructor Block被自动执行!");
	}

	static
	{
		System.out.println("位置2:CodeBlock类的Static Block被自动调用!");
	}
}
运算结果如下:

C:\Users\lenovo\Desktop>javac CodeBlock.java

C:\Users\lenovo\Desktop>java CodeBlock
位置1:CodeBlock类的Static Block被自动调用!
位置2:CodeBlock类的Static Block被自动调用!
程序开始执行,执行第一个对象!
位置1:Test类的Static Block被自动调用!
位置2:Test类的Static Block被自动调用!
位置1:Test的Constructor Block被自动执行!
位置2:Test的Constructor Block被自动执行!
Test的构造函数Test()执行!
程序执行第二个对象!
位置1:Test的Constructor Block被自动执行!
位置2:Test的Constructor Block被自动执行!
Test的构造函数Test()执行!
程序执行第三个对象!
位置1:CodeBlock类的Constructor Block被自动执行!
位置2:CodeBlock类的Constructor Block被自动执行!
CodeBlock的构造函数CodeBlock()执行!
程序执行第四个对象!
位置1:CodeBlock类的Constructor Block被自动执行!
位置2:CodeBlock类的Constructor Block被自动执行!
CodeBlock的构造函数CodeBlock()执行!

对构造代码块和静态代码块总结:

都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,给所在的位置无关,一般在代码块中对一些变量进行赋值。

静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。静态代码块只在第一次new对象时执行一次,之后不再执行,构造代码块在每new对象一次就执行一次。

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值