初始化顺序:

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{ }之前执行。

Java 的初始化顺序的更多相关文章

  1. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  2. JAVA的初始化顺序:

    JAVA的初始化顺序: 父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造 ...

  3. java 继承 初始化顺序

    面向对象三大特性: 封装,继承,多态 java 继承初始化顺序 先初始化父类对象, 在父类对象中先初始化父类属性,再初始化父类的构造方法,然后初始化子类对象,初始化子类对象的属性,初始化子类的构造方法 ...

  4. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  5. java继承 初始化顺序

    java继承 初始化顺序 标签: 初始化顺序 2013-08-01 10:13 879人阅读 评论(0) 收藏 举报  分类: java(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  6. Java变量、Java对象初始化顺序

    局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...

  7. Java对象初始化顺序

    最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com.ds.test;   public class Upper { String upperSt ...

  8. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  9. 【细说Java】Java变量初始化顺序

    Java的变量初始化顺序,对这里一直似懂非懂,面试的时候也经常被问到,但答的一直不好,现在整理记录一下,以后忘记了可以来看看. 程序分为两个部分,第一个部分不考虑继承,第二个部分考虑继承: (1)不考 ...

  10. JAVA的初始化顺序

    这里主要是介绍JAVA的类的初始化顺序,比较基础:主要是以例子演示为主: 例子一: 1 package com.cnblog.GDUTtiantian; 2 3 /** 4 * 5 * @author ...

随机推荐

  1. centos7.4内核从3.10升级到4.14详细步骤

    由于我们的docker学习中的Overlay需要内核版本在3.12+,所以在安装完centos7.4之后要进行内核升级,下面是升级步骤:1.导入keyrpm --import https://www. ...

  2. springMVC笔记一

    第一章 回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章 回顾stru ...

  3. SSH整合主要XML代码

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  4. Dubbo 的 Helloworld

    前提条件 安装好了 ZooKeeper 作为注册中心 服务端 <?xml version="1.0" encoding="UTF-8"?> < ...

  5. 【bzoj1412】[ZJOI2009]狼和羊的故事 网络流最小割

    题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...

  6. 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组

    bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...

  7. BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)

    考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include ...

  8. NOIP临考经验【转】

    NOIP临考经验 1.提前15分钟入场,此时静坐调整心态,适当的深呼吸 2.打开编辑器并调整为自己喜欢的界面 3.熟悉文件目录,写好准确无误的代码模板 4.压缩包或许还不能解压,但是文件名已经可以知道 ...

  9. [CQOI2012]局部极小值

    题目链接 注意到\(4\times 7\)的矩阵的局部极小值最多只有8个,可以状压. 设\(f[i][sta]\)表示从小到大填数,当前填到\(i\),极小值的填充状态为\(sta\)的方案数. 考虑 ...

  10. 【COGS 461】[网络流24题] 餐巾 最小费用最大流

    既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一 ...