Java 成员初始化过程

来源:互联网 发布:拍摄淘宝服装图片技巧 编辑:程序博客网 时间:2024/06/03 21:50
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) {}

}

类属性初始化时虚拟机是不会声明属性的同时赋值的,它会把所有属性和方法全部声明完了再从头按代码顺序赋值。

  1. 类加载过程(静态属性、静态方法声明-----静态属性赋值、静态块)注意先父类后子类

  2. 实例化过程(普通属性、普通方法声明-----普通属性赋值、构造块----构造方法中的代码)也是先父类后子类

  3. 如果在类加载过程中调用了实例化过程(如new了本类对象),则会暂停类加载过程先执行实例化过程,执行完毕再回到类加载过程

实例化t1的时候,会进入实例化过程:普通属性j,构造快,然后才是构造方法 (可以理解为j和构造快为t1自己的东西,必须先分配好)
t2同理,等静态成员初始化结束后,静态块。
static final的常量称为编译期常量,初始化之前就已经有了

  

0 0
原创粉丝点击