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

java学习个人笔记---类成员变量初始化顺序

2015-08-15 17:16 495 查看
类成员变量初始化顺序:

1、定义实例变量时指定初始值;

2、非静态初始化块中对实例变量指定初始值;

3、构造函数对实例变量指定初始值

这3种方式(以下简称1,2,3)初始化的顺序是怎样的呢?

下面根据程序实例分析一下:

public class Javatest_ClassMemberInitOrder {
int b;
//构造函数对实例变量指定初始值
public Javatest_ClassMemberInitOrder(int b){
System.out.println("执行构造函数");
this.b=b;
this.a=b;
}
//非静态初始化块中对实例变量指定初始值
{
System.out.println("执行非静态初始化块");
a=2;
}
//定义实例变量时指定初始值
int a=3;
public static void main(String[] args){
Javatest_ClassMemberInitOrder myclass=new Javatest_ClassMemberInitOrder(5);
System.out.println("b="+myclass.b);
System.out.println("a="+myclass.a);
}
}




由此可见其中1和2要比3更早执行,那么1与2哪个更早执行呢?

下面我测试一下:



这里要注意了:1与2 的执行顺序与他们在源程序中的排列顺序有关,是按顺序执行的

这里分析一下a=3而为什么不等于2

实际上会被分成两块执行:

int a:创建Java对象时分配内存

a=3:提取到Java类构造器中执行(这里注释掉,其实还是会被系统调用进去),最终的结果a=3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息