您的位置:首页 > 编程语言 > Java开发

Java 成员初始化过程

2015-07-09 15:00 399 查看
package test;

public class T  implements Cloneable {
public static int k = 0;
public static T t1 = new T("t1");
public static T t2 = new T("t2");
public static int i = print("i");
public static int n = 99;

public int j = print("j");

{
print("构造快");
}

static {
print("静态块");
}

public T(String str) {
System.out.println((++k) + ":" + str + "    i=" + i + "  n=" + n);
++n;
++i;
}

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了本类对象),则会暂停类加载过程先执行实例化过程,执行完毕再回到类加载过程
实例化t1的时候,会进入实例化过程:普通属性j,构造快,然后才是构造方法 (可以理解为j和构造快为t1自己的东西,必须先分配好)t2同理,等静态成员初始化结束后,静态块。static final的常量称为编译期常量,初始化之前就已经有了  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 静态 初始化