java初始化

public class InitObjectDemo extends Base{
	int derive_i;
	static int s_derive_i = 4;
	static{ //静态初始化块
		static_print();
		System.out.println("derive class: static{}");
	}
	{//实例初始化块
		instances_print();
		static_print();
		System.out.println("derive class instanc init()");
	}
	public InitObjectDemo(){
		System.out.println("derive_i=" + derive_i);
		System.out.println("static_derive_i=" + s_derive_i);
	}
	public  void instances_print(){
		System.out.println("derive_class:instances function call");
	}
	public  void base_instances_print(){
		System.out.println("base_derive_class:instances function call");
	}
	public static void static_print(){
		System.out.println("derive_class:static function call");
	}
	public static void main(String[] args){
		new InitObjectDemo();
		new InitObjectDemo();
	}
 
}
 
class Base{
	int base_i;
	static int s_base_i = 2;
	static{ //静态初始化块
		static_print();
		System.out.println("base class: static{}");
	}
	{ //实例初始化块
		base_instances_print();//调用的方法是子类中覆盖基本的方法,
		this_instances_print();  
		static_print();
		System.out.println("base class instanc init()");
	}
	public  void this_instances_print(){
		System.out.println("base_class:instances function call");
	}
	public  void base_instances_print(){
		System.out.println("base_class:instances function call");
	}
	public static void static_print(){
		System.out.println("base_class:static function call");
	}
	public Base(){
		System.out.println("base_i=" + base_i);
		System.out.println("static_base_i=" + s_base_i);
	}
}

 

 

输出:
base_class:static function call
base class: static{}
derive_class:static function call
derive class: static{}
base_derive_class:instances function call
base_class:instances function call
base_class:static function call
base class instanc init()
base_i=0
static_base_i=2
derive_class:instances function call
derive_class:static function call
derive class instanc init()
derive_i=0
static_derive_i=4
base_derive_class:instances function call
base_class:instances function call
base_class:static function call
base class instanc init()
base_i=0
static_base_i=2
derive_class:instances function call
derive_class:static function call
derive class instanc init()
derive_i=0
static_derive_i=4

1. 初始化过程
初始化顺序:
第一次创建对象的时候:
1. 先递归执行父类的静态初始化块,然后执行子类的静态初始化块;
2. 先递归执行父类的实例初始化块,然后执行父类的构造方法;
3. 执行子类的实例初始化块,然后执行子类的构造方法;
第二次创建对象的时候:
4. 如果父类的静态初始化块已经执行过,则跳过;否则递归执行父类的静态初始化块,然后执行子类的静态初始化块;
5. 先递归执行父类的实例初始化块,然后执行父类的构造方法;
6. 执行子类的实例初始化块,然后执行子类的构造方法;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值