首页 > 其他 > 详细

请你谈谈类成员的初始化顺序?

时间:2020-03-07 18:47:45      阅读:67      评论:0      收藏:0      [点我收藏+]

类成员什么时候会被初始化呢?一般来说:"类的代码在初次使用时才被加载",加载过程包括了初始化。

比如说new A()调用构造函数时,类中全部成员都会被初始化。

但对于static域(包括静态成员变量、静态代码块、静态方法),当某个static域被调用时,类中的的所有staict就会被初始化,按照定义顺序(即书写顺序)初始化,且只会初始化一次(N个实例共用)``。

static域的初始化优先级要优于普通成员(即非静态域)

静态域:静态代码块、静态成员变量 非静态域:非静态代码块、非静态成员变量 (ps:成员方法不包含在里面,因为方法只能讲加载而非初始化)

1.在没有继承父类的情况下:

  初始化顺序为:静态域 -> 非静态域 -> 构造函数 以上面优先级并按所定义的顺序初始化(即书写顺序)。

2.在有继承父类的情况下:

  初始化顺序为:父类静态域->子类静态域->父类非静态域->父类构造函数->子类非静态域->子类构造函数。

 

  这里说明一点:这是初始化顺序,不等同于语句程序的执行过程。因此在上面的初始化顺序里没有成员方法(静态或者非静态都没有),这是因为成员方法都是调用了才执行,虽然静态方法已经被加载进了方法区,但初始化过程中并没有执行过。

请你谈谈类成员的初始化顺序?

原文:https://www.cnblogs.com/jingpeng77/p/12435991.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!