初始化顺序:

1.将对象内存空间初始化为二进制0(所有的数据成员被设为默认值)

2.如果该类有基类则初始化其基类(调用默认基类构造器,也可在子类构造器中指定调用基类的某个构造器)

3. 静态成员和静态域(谁在前谁先初始化,且在内存中只占一份空间,同一个类不同对象可以共享)

4.main方法

5.非静态成员变量,引用,实例初始化  被初始化

6. 构造器

1,2,3,4为类加载过程,5,6为new对象过程,只有new会执行。

class A {
A() {
System.out.println("基类构造器");
System.out.println("证明数据成员被设为默认值");
draw(); } A(String s) {
System.out.println(s);
} void draw() {
System.out.println("A.draw()");
} } public class Test extends A { int i = 5; Test() {
System.out.println("子类构造器");
System.out.println("证明数据成员在构造器调用之前被初始化");
draw();
} String b = "非静态成员";
A a = new A(b + "与非静态引用"); {
A b = new A("实例初始化");
} String c = "非静态成员与实例初始化平级,谁在前先初始化谁";
A d = new A(c); void draw() {
System.out.println("i = " + i);
} static A start = new A("---类加载---");
static String e = "静态成员";
static A f = new A(e + "和静态引用"); static {
A g = new A("静态域");
} static String h = "静态成员与静态域平级,谁在前先初始化谁";
static A j = new A(h); public static void main(String[] args) { System.out.println("main执行");
System.out.println("---创建Test对象---");
Test k = new Test(); } }

输出结果:

---类加载---
静态成员和静态引用
静态域
静态成员与静态域平级,谁在前先初始化谁
main执行
---创建Test对象---
基类构造器
证明数据成员被设为默认值
i = 0
非静态成员与非静态引用
实例初始化
非静态成员与实例初始化平级,谁在前先初始化谁
子类构造器
证明数据成员在构造器调用之前被初始化
i = 5

总结:

  1. 所有静态成员是属于Class对象的,所有非静态成员是属于实例对象的,先加载Class对象在创建实例对象,所以先执行静态变量,在执行实例变量

  2. 注意: new A() 是A 的实例对象,也就是说所有非静态的成员都是属于new A() ,所有静态成员都是属于A.class 对象的, 但是如果 有2个静态成员按顺序分别是 static A a = new A ( ) 和static{   }那么 一定是先执行第一个静态成员 new A() ,所以属于new A()的非静态成员在 static{ }之前执行。

最新文章

  1. 利用nagios搭建打印机监控服务器
  2. PostgreSQL笔记
  3. 奇怪吸引子---ShimizuMorioka
  4. buildbot 自动启动
  5. Connection对象连接加密2
  6. Js popup position which right under target item
  7. 第十二篇、高度自适应的textView
  8. 【JSP】JSTL核心标签库的使用方法和示例
  9. git分支--branch
  10. doubango简介
  11. C++11 中的function和bind、lambda用法
  12. 安装pytorch0.4.0
  13. API 开发平台 dreamfactory,参考SAWAGGER,国外厂家,开源,本地与云部署
  14. Go指南练习_图像
  15. css列表list、表格table
  16. Android - Resource 之 Menu 小结
  17. JVM调优推荐
  18. jar 命令详解
  19. MySql8.0数据库链接报错The driver has not received any packets from the server
  20. Matlab 矩阵函数

热门文章

  1. linux备忘录-日志档案
  2. linux下easy_install的安装与使用详解
  3. 软工实践Beta冲刺(1/7)
  4. 正则匹配java多行注释
  5. 【转】GOOGLE-PROTOBUF与FLATBUFFERS数据的序列化和反序列化
  6. jQuery添加、移除、改变class属性
  7. BZOJ5323 [Jxoi2018]游戏 【数论/数学】
  8. BZOJ1452 [JSOI2009]Count 【树套树 (树状数组)】
  9. CSS3边框会动的信封
  10. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B