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

来源:互联网 发布:黑帽seo软件 编辑:程序博客网 时间:2024/05/19 09:48

类成员变量初始化顺序:

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

0 0
原创粉丝点击