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 成员初始化顺序和内存分配过程

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

Java何时初始化final字段

不可变的类的实例有天然是线程安全的优势,在写不可变类的时候经常用到final字段, 比如: private final String name;但是这样写,一般的IDE应该会给出错误提示,说你没...
  • maywehe
  • maywehe
  • 2017年02月19日 01:18
  • 258

java中成员的初始化

java
  • hexingwei
  • hexingwei
  • 2015年05月26日 11:05
  • 249

C#中成员初始化顺序

一、成员初始化整体顺序
  • huangcailian
  • huangcailian
  • 2014年05月16日 11:21
  • 799

对象创建过程,初始化顺序

Java虚拟机创建一个对象都包含以下步骤。 (1)给对象分配内存。 (2)将对象的实例变量自动初始化为其变量类型的默认值。 (3)初始化对象,给实例变量赋予正确的初始值。   对于以上第三个步...
  • u013127724
  • u013127724
  • 2015年04月08日 17:19
  • 2068

java基础---java成员初始化过程

我首先学习 没有继承状态下,java成员初始化过程 class ConstructorDemo { public static void main(String[] args) { Sy...
  • big_bit
  • big_bit
  • 2017年11月14日 16:20
  • 33

成员初始化表

成员初始化表#include class Account {public:Account();Account( const char*, double=0.0 );Account( const str...
  • Augusdi
  • Augusdi
  • 2014年07月29日 16:46
  • 913

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

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

Java类成员初始化

Java类成员初始化与C++初始化的方式有很多不同,这部分知识相对比较基础,从而导致很多Java程序员对于Java类初始化机制不甚了了。下面就Java类成员初始化方式做一个梳理,希望对大家有益。 一...
  • chengmaoning
  • chengmaoning
  • 2013年05月30日 15:03
  • 6057

类的数组成员变量的初始化

使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。 但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。 这里介绍一下当数组作为类...
  • imxiangzi
  • imxiangzi
  • 2015年10月29日 13:12
  • 2119
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 成员初始化过程
举报原因:
原因补充:

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