Java基础(四)——初始化块

     Java使用构造器来对单个对象进行初始化操作,使用构造器先完成整个java对象的状态初始化,然后将java对象返回给程序,从而该java对象的信息更加完整。与构造器作用类似的是初始化块。初始化块是Java类里可以出现的第4种成员,前面依次有成员变量、方法、构造器,下面我们就来介绍一下它:


    一、初始化块语法格式


     初始化块里的代码可以包含任何可执行性语句,包括定义局部变量、调用其他对象的方法以及分支、循环等语句


	[修饰符] {
		//初始化块的可执行代码
		......
	}

            二、普通初始化块


     下面程序定义了一个Person类,它即包含了构造器,也包含了初始化块。


package cn.gome.c_object;

public class Person {
	
	//定义第一个初始化块
	{
		int a = 5;
		if(a > 4){
			System.out.println("Person初始化块:局部变量a的值大于4");
		}
		System.out.println("Person的第一个初始化块");
	}	
	
	//定义第二个初始化块
	{
		System.out.println("Person的第二个初始化块");
	}	
	
	//定义无参数的构造器
	public Person(){
		System.out.println("Person类的无参数构造器");
	}
	
	public static void main(String[] args) {
		new Person();
	}

}



     程序输出如下:

     


     从运行结果可以看出,当创建Java对象时,系统总是先调用该类里定义的初始化块,如果一个类定义了2个初始化块,则前面定义的先执行,后面定义的初始化块后执行。

     初始化块虽然也是Java类的一种成员,但它没有名字,也就没有标识,因此无法通过类、对象来调用初始化块,只能在创建Java对象时隐式执行,而且在构造器之前执行。


     、静态初始化块


     如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块。静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化,而不是在创建对象时才执行。因此静态初始化块总是比普通初始化块先执行。


class Root
{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root()
	{
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root
{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid()
	{
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg)
	{
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:" + msg);
	}
}
class Leaf extends Mid
{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf()
	{
		//通过super调用父类中有一个字符串参数的构造器
		super("Struts2权威指南");
		System.out.println("执行Leaf的构造器");
	}

}

public class Test
{
	public static void main(String[] args) 
	{
		new Leaf();
		new Leaf();

	}
}


     程序的输出结果如下:

     

     从上面的代码中可以发现,初始化块是一段固定执行的代码,不能接受任何参数,因此初始化块对同一个类的所有对象所进行的初始化处理完全相同。基于这个原因,不难发现初始化块的基本用法,如果有一段初始化处理代码对所有对象完全相同,且无需接收任何参数,就可以吧这段初始化代码提取到初始化代码中。




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值