看到帖子讨论,继续讨论java初始化问题,然后我debug了下,和自己想的差不多。然后写出来分享给大家,记住三点就不会错了啊啊啊啊啊啊啊啊~~~坑~~
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