初始化块

[修饰符] {
	各种语句
}

初始化块没有名字
修饰符只能出现一个:static

  • 有static叫类初始化块(静态初始化块)
  • 无static叫实例初始化块(非静态初始化快)

一、实例初始化块

  1. 实力初始化块是“假象”,一个类在编译过后,实例初始化块就会消失------实例初始化块的代码会被还原每个构造器的所有代码之前。
  • 实例初始化块的作用:将多个构造器前面部分相同的代码可以提取到实例初始化块中。

  • 实例初始化块何时执行?
    只要程序调用构造器创建对象,程序总会先执行实例初始化块------因为实例初始化块被还原到每个构造器的所有代码之前。

  1. 定义实例变量时指定的初始值也是“假象”-----指定初始值,编译之后就变成了构造器所有代码之前的一条赋值语句。
  • 实例初始化块的语句要还原到构造器所有代码之前,定义变量指定的的初始值也要还原到构造器的所有代码之前:这二者还原之后的顺序按照它们在源代码中顺序。
public class Init
{
	//还原到构造器的所有代码之前
	{
		System.out.println("aa");
		age = 20;
	}
	//还原到构造器的所有代码之前
	int age = 2;
	public Init()
	{
		//System.out.println("aa");
		//age = 20;
		//age = 2;
		System.out.println("无参的构造器");
	}
	public Init(String name)
	{
		//System.out.println("aa");
		//age = 20;
		//age = 2;
		System.out.println("带String参数的构造器,参数为:" + name);
	}
}

二、类初始化块

  1. 类初始化块----负责对类执行初始化,当程序第一次【主动】使用该类时,系统会为该类分配内存空间、并执行初始化(调用类初始化块)。
  • 【主动】使用:只要使用该类基本上都算主动使用-----除了仅使用类声明变量。

  • 类初始化块何时执行?
    程序第一次【主动】使用该类时,程序会先执行类初始化块。在程序运行时,类初始化块只会执行一次

执行次数执行先后何时执行
类初始化块1次第一次主动调用该类
实例初始化块N次每次调用构造器
  1. 定义类变量时指定的初始值也是“假象”-----指定初始值,编译之后就变成了类初始化块中的一条赋值语句。但到底在类初始化的代码之前还是代码之后,取决于它在源代码中的顺序。
public class StaticInit
{
	static int age = 30;
	//类初始化块
	static{
		// age = 30;第一次主动调用之后还原
		System.out.println("类初始化块");
		age = 300;
	}
}
public class StaticInitTest
{
	public static void main(String[] args)
	{
		StaticInit si;
		//访问类来访问类变量----算主动使用
		//第一次主动调用StaticInit类,执行类初始化块
		System.out.println(StaticInit.age);
		//类初始化块
		//300
		
		System.out.println(StaticInit.age);
		//30
	}
}

初始化任何类之前,一定先从Object开始初始化,依次初始化它所有祖先类,最后才到它自己。
创建任何对象时,一定先从Object构造器开始执行,执行它的所有祖先类构造器,最后财智星它自己的构造器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值