一.static
1.静态代码块:
2.静态方法:
3.静态变量:
二.类的加载
1.什么时候加载
类的加载是通过类加载器(Classloader)完成的。
两种情况加载类:
只要有其它类引用了它就加载;等到
类初始化发生的时候才加载。应该跟不同jvm有关
2.那什么时候初始化
4.加载顺序
public class Test {
public static int k = 0;
public static Test t1 = new Test("t1");
public static Test t2 = new Test("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
{
print("构造块");
}
static {
print("静态块");
}
public Test(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[]) {
Test t = new Test("init");
}
// 加载顺序 静态变量、成员变量加载,初始化为零。执行顺序 静态变量>静态代码块>主函数(静态方法)>成员变量>构造代码块>构造函数
}
》》》
1:j i=0 n=0
* 1.2顺序加载类中的非static代码块(static暂时不加载)
* 这里是:print("构造快");和print("静态块");
》》》
2:构造快 i=1 n=1
* 1.3加载类的构造方法
* 这里是:public StaticTest(String str)
3:静态块 i=2 n=2
》》》
4:t1 i=3 n=3
》》》
5:j i=4 n=4
6:构造快 i=5 n=5
7:静态块 i=6 n=6
8:t2 i=7 n=7
》》》
9:i i=8 n=8
*
然后
加载:public static int n = 99; 注意现在n为99了
* 2.如果有static代码块,在这里先加载,这个里面没有
》》》
10:j i=9 n=99
11:构造快 i=10 n=100
12:静态块 i=11 n=101
13:init i=12 n=102
转载自http://blog.sina.com.cn/s/blog_1552a7b490102w3xk.html