初始化顺序:

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. Windows下LATEX排版论文攻略—CTeX、JabRef使用心得

    笔者刚刚接触到TEX排版,相关知识完全空白,用了两天时间学习并完成了一篇论文的完整排版. 期间遇到不少小问题,着实辛苦,分享至上,现将其解决办法总结归纳,共同学习. 一.工具介绍 TeX是一个很好排版 ...

  2. C#-WinForm控制输入框只接受数字输入

    背景 给导师上一节c#编写数据库应用程序的课,模拟ATM自助取款机的功能写了个winForm程序,关于金额的输入肯定是数字,因此避免输入格式不正确的数字带来异常,直接在输入时进行校验. 封装函数 C# ...

  3. lintcode-96-链表划分

    96-链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-&g ...

  4. 【UML】类图介绍

    1.类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 2.类的关系有泛化(Generalization). ...

  5. user32的使用

    通过代码查询特定的窗口,并在文本框中输入文字然后单击"OK"按钮 需要查找的Dialog 使用Spy++查看窗口信息 通过代码实现功能 class Program { //defi ...

  6. 算法(13)Contiguous Array

    题目:找出数组的一个子数组,要求这个子数组中0和1的数量相等,找出最大长度的这样的数组! 思路:也是受网上算法的启发吧,用一个 语言:如何初始化一个unordered_map<int,int&g ...

  7. Delphi 之 编辑框控件(TEdit)

    TEdit 组件主要用于数据的输入和显示和编辑等操作. AutoSelect 获取组件焦点.该属性只能在单行文本组件使用.值为True为选中.false则不选中. BorderStyle 设置编辑框控 ...

  8. Div+Css制作圆

    Div+Css制作四分之一圆主要是使用Css3.0中的border-radius这个圆角隐藏属性.利用这一属性,我们可以画圆,画半圆,四分之三圆,四分之一圆等.以后我会更新…… 如何使用border- ...

  9. IIS注册asp.net4.0

    1. 运行->cmd 2. cd  C:\Windows\Microsoft.NET\Framework64\v4.0.30319 3. aspnet_regiis.exe -i

  10. [洛谷P3382]【模板】三分法

    题目大意:给出一个$N$次函数,保证在范围$[l,r]$内存在一点x,使得$[l,x]$上单调增,$[x,r]$上单调减.试求出$x$的值. 题解:求导,就变成了求零点,二分答案即可 卡点:无 C++ ...