初始化块学习笔记

★初始化块

语法:
[修饰符]
{
各种语句
}
初始化块是没有名字的。
修饰符只能出现一个: statige
一有static叫类初始化块(静态初始化块)
-无static叫实例初始化块(非静态初始化块) ;

▲实例初始化块。

无static
实例初始化块是,“假象”, -个类在编译之后,实例初始化块就会消失
一一实例初始化块的代码会被还京每个构造器的所有代码之前。

实例初始化块的作用.将多个构造器前面部分相同的代码可以提取到实例初始化块中!

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

定义实例变量时指定的初始值,也是“假象”
——指定初始值,编译之启就变成构造器所有代码之前一条赋值语句!

实例初始化块的语句要还原到构造器的所有代码之前,定义变量指定的初始值,也要还原到构造器的所有代码之前;
这二者还原之后的顺序,按照它们在源代码中顺序。

▲类初始化块。

有static
类初始化块- 负责对类执行初始化。
当程序第一次「主动]使用该类时.系统会为该类分配内存空间、并执行初始化(调用类初始化块)
只要你便用该类,基本都算主动使用——除了夜使用类声明变量。

Q:类初始化块何时执行?
A: 程序第一次「主动]使用该类时,会执行该类的类初始化块。
程序运行时,该类初始化块只执行一次!"

定义类变量时指定的初始值,也是“假象”
一一指定的初始值,编译之后就变成类初始化中的-条赋值语句,
但到底是在类初始化块的代码之前,还是代码之后,取决于它在源代码中的顺序。

创建任何对象的时,- 定是从0bject构造器开始执行,执行它所有祖先类的构造器,最后才执行它自己构造器!

public class intit 
{
	public static void main(String[] args) 
	{
		new leaf();
	}
}
class root 
{
	static 
	{
		System.out.println("root de lei ");
	}
	{
		System.out.println("root de shi");
	}
	public root()
	{
		System.out.println("root de wucangouzaoqi");
	}
}
class mid extends root 
{
	static 
	{
		System.out.println("mid de lei");
		}
	{
		System.out.println("mid de shi");
		}
		public mid()
	{
		
		System.out.println("mid de wucangouzaoqi");
		}
		public mid(String s)
	{
		
		System.out.println("mid de youcangouzaoqi");
		}
}
class leaf extends mid
{
	static 
	{
		System.out.println("leaf de lei");
	}
	{
		System.out.println("leaf de shili");
	}
	public leaf()
	{
			System.out.println("leaf de gouzaoqi");
	}
}

输出:
root de lei
mid de lei
leaf de lei
root de shi
root de wucangouzaoqi
mid de shi
mid de wucangouzaoqi
leaf de shili
leaf de gouzaoqi

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值