Java Object Initialization

public class InitializeDemo {
	private static int k = 1;
	private static InitializeDemo t1 = new InitializeDemo("t1");
	private static InitializeDemo t2 = new InitializeDemo("t2");
	private static int i = print("i");
	private static int n = 99;
	static {
		print("Static Module");
	}
	private int j = print("j");
	{
		print("Constructive Module");
	}
	public InitializeDemo(String str) {
		System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
		++i;
		++n;
	}
	public static int print(String str) {
		System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
		++n;
		return ++i;
	}
	public static void main(String args[]) {
		new InitializeDemo("init");
	}
}


Output is:

1:j   i=0    n=0
2:Constructive Module   i=1    n=1
3:t1   i=2    n=2
4:j   i=3    n=3
5:Constructive Module   i=4    n=4
6:t2   i=5    n=5
7:i   i=6    n=6
8:Static Module   i=7    n=99
9:j   i=8    n=100
10:Constructive Module  i=9    n=101
11:init   i=10    n=102

Principles:

1.静态属性和静态代码块都是在类加载的时候初始化和执行, 两者的优先级别是一致的, 且高于非静态成员, 执行按照编码顺序。
2.非静态属性和匿名构造器在所有的构造方法之前执行, 两者的优先级别一致, 执行按照编码顺序。
3.以上执行完毕后执行构造方法中的代码。


(静态属性=静态代码块)> (非静态属性 = 构造块)> 构造方法


Summary:

1.静态只在类加载的时候执行,且仅执行一次。
2.非静态只在实例化的时候执行,且每次实例化都执行。
3.静态在非静态之前执行。
4.静态属性和静态块的执行顺序取决于编码顺序,对它们一视同仁。
5.非静态属性和构造块的执行顺取决于编码顺序,对它们也一视同仁。
6.最后执行构造方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值