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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树