- package com.lean;
- public class InitJava {
- /*
- * static静态变量初始化,构造函数调用(每次都执行,初始化非静态变量,方法,目的就是防止构造函数调用非静态方法属性)
- * 构造函数执行,main函数执行
- *
- * 其实记住三点就行了~~~~搞的我都郁闷死了,给大家总结下:
- * 1.先顺序加载static变量
- * 2.无论何时只要执行构造函数,那么在执行构造函数方法体之前必须完成非静态变量,方法的加载(不限次数)
- * 3.static执行完成后,classloader会执行main方法体,然后就正常执行呗~~~
- */
- public static int k = 0;
- public static InitJava t1 = new InitJava("t1");
- public static InitJava t2 = new InitJava("t2");
- public static int i = print("i");//
- public static int n = 99;
- private int a = 0;
- public int j = print("j");
- {
- print("构造块");
- }
- static {
- print("静态块");
- }
- public InitJava(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[]) {
- InitJava t = new InitJava("init");
- }
- }
- 1:j i=0 n=0
- 2:构造块 i=1 n=1
- 3:t1 i=2 n=2
- 4:j i=3 n=3
- 5:构造块 i=4 n=4
- 6:t2 i=5 n=5
- 7:i i=6 n=6
- 8:静态块 i=7 n=99
- 9:j i=8 n=100
- 10:构造块 i=9 n=101
- 11:init i=10 n=102
转自http://blog.csdn.net/supera_li/article/details/39431663