JAVA --- 初始化块

Java  ---  初始化块

       初始化块和构造器的功能很相似,都可以对Java对象进行初始化操作,从而使Java对象的信息更加完整。

       一个类里可以有多个初始化块,初始化块是按照定义的先后顺序执行(尽量使用一个初始化块,初始化块是隐式执行且全部执行,合并成一个初始化块可以使代码更简洁可读性更强,便于更改)其语法格式如下:

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

建立Java对象的时候系统总是先调用该类里定义的初始化块,在构造器之前执行。

       与构造器相似,创建一个Java对象时,不仅会执行该类的的初始化块和构造器,而且系统会一直上溯到java.llang.Object类,依次向下执行其父类的初始化块、构造器。

                  

       初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块,初始化块里能够写入任何可执行语句。静态初始化块是与类相关的,在类初始化的阶段就执行静态初始化块,而不是在创建对象的时候才执行。下面我们来看一个程序:

 

package JustSomeNEWTry;

public class javaP161 {
	{
		System.out.println("顶层父类的普通初始化块");
	}
	
	static {
		System.out.println("顶层父类的静态初始化块");
	}
	
	public javaP161() {
		System.out.println("顶层父类的无参构造函数");
	}
}
	class subjavaP161 extends javaP161 {
		{
			System.out.println("subjavaP161的普通初始化块");
		}
		
		static {
			System.out.println("subjavaP161的静态初始化块");
		}
		
		public subjavaP161() {
			System.out.println("subjavaP161的无参构造函数");
		}
	}
	
	class subjava extends subjavaP161 {
		{
			System.out.println("subjava的普通初始化块");
		}
		
		static {
			System.out.println("subjava的静态初始化块");
		}
		
		public subjava() {
			System.out.println("subjava的无参构造函数");
		}
		
		public static void main(String[] args) {
			new subjava();
		}
		
	}

 执行结果:

前三条语句(类初始化阶段):

       先执行顶层父类的静态初始化块,然后依次向下执行直到当前所调用的类的静态初始化块。

余下语句(对象初始化阶段):

       先执行顶层父类的普通初始化块和构造器,然后依次向下执行普通初始化块(先)和构造器(后),直到当前所调用的类。


总结:

  • 初始化块在构造器之前执行。
  • 静态初始化块在普通初始化之前(类初始化阶段)执行。
  • 创建Java对象时,初始化块和构造器一样会上溯到顶层执行。

 

 

参考书籍《疯狂Java讲义》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值