Java 成员初始化过程

原创 2015年07月09日 15:00:36
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的常量称为编译期常量,初始化之前就已经有了

  

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)

------- android培训、java培训、期待与您交流! ----------   一、面向对象(static关键字) static:用于修饰成员(成员变量,成员函数) 当成员被静态关键字...

Java中的成员初始化顺序和内存分配过程

原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source=feedburner&utm_mediu...
  • resouer
  • resouer
  • 2013年03月26日 00:31
  • 1462

JAVA 成员初始化顺序和内存分配过程

成员初始化顺序属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序: 父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。 子类静态成员和静态初始化块,按在代码中出...

Java基础——Static修饰符+静态相关+帮助文档制作+对象初始化_调用成员过程+单例设计

一、Static修饰符 String name;//成员变量,实例(对象)变量。 Static String name;//静态的成员变量,类变量。 用于修饰成员(变量,函数) 当每个对象都有...

Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数

Java初始化顺序 1在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B 3,装载父类A后,完成静态动...

黑马程序员——Java类变量和成员变量初始化过程

------- android培训、java培训、期待与您交流! ---------- 一、类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量。...

浅析Java内存和创建对象时成员的初始化过程

Java虚拟机在运行需要在内存中开辟空间,在空间中进一步分区,每个分区都有其对数据的处理特点, 内存的划分: 1、寄存器: CPU在处理,存储速度非常快,程序不可控制 2、本地方法区:和所在系统...

java继承&子父类成员域加载及执行过程

前段时间偶然看到一篇文章,关于java继承的,讲其加载顺序,然后我就看蒙了,虽然接触过不少时间java,用起来因为编译器的存在没什么语法问题,但真正用notepad++时,发现细节真的很重要,下面看测...

JAVA类继承过程中其成员的一些问题

JAVA类继承过程中其成员的一些问题 构造函数不能继承。子类的构造函数可以通过super关键字显式调用父类中的构造函数。如果子类中的构造函数没有显式调用父类中的构造函数, 编译器就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 成员初始化过程
举报原因:
原因补充:

(最多只允许输入30个字)