Java 的初始化顺序
初始化顺序:
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
总结:
所有静态成员是属于Class对象的,所有非静态成员是属于实例对象的,先加载Class对象在创建实例对象,所以先执行静态变量,在执行实例变量
- 注意: new A() 是A 的实例对象,也就是说所有非静态的成员都是属于new A() ,所有静态成员都是属于A.class 对象的, 但是如果 有2个静态成员按顺序分别是 static A a = new A ( ) 和static{ }那么 一定是先执行第一个静态成员 new A() ,所以属于new A()的非静态成员在 static{ }之前执行。
 
Java 的初始化顺序的更多相关文章
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
		
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
 - JAVA的初始化顺序:
		
JAVA的初始化顺序: 父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造 ...
 - java 继承 初始化顺序
		
面向对象三大特性: 封装,继承,多态 java 继承初始化顺序 先初始化父类对象, 在父类对象中先初始化父类属性,再初始化父类的构造方法,然后初始化子类对象,初始化子类对象的属性,初始化子类的构造方法 ...
 - 【知识总结】Java类初始化顺序说明
		
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...
 - java继承 初始化顺序
		
java继承 初始化顺序 标签: 初始化顺序 2013-08-01 10:13 879人阅读 评论(0) 收藏 举报 分类: java(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
 - Java变量、Java对象初始化顺序
		
局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...
 - Java对象初始化顺序
		
最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com.ds.test; public class Upper { String upperSt ...
 - Android(java)学习笔记136:Java类初始化顺序
		
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化( ...
 - 【细说Java】Java变量初始化顺序
		
Java的变量初始化顺序,对这里一直似懂非懂,面试的时候也经常被问到,但答的一直不好,现在整理记录一下,以后忘记了可以来看看. 程序分为两个部分,第一个部分不考虑继承,第二个部分考虑继承: (1)不考 ...
 - JAVA的初始化顺序
		
这里主要是介绍JAVA的类的初始化顺序,比较基础:主要是以例子演示为主: 例子一: 1 package com.cnblog.GDUTtiantian; 2 3 /** 4 * 5 * @author ...
 
随机推荐
- UVA215 Spreadsheet
			
这道题题目大意就是计算带有单元格引用的各单元格的值. 这道题本身不难,有以下几个关键点: 1.如何判断一个单元格循环引用 2.注意对字符串的细致处理 我出现的错误出现在以上两个方面,思路本身是不难的. ...
 - HDU  1398  Square Coins  整数拆分变形 母函数
			
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
 - PAT 甲级 1036 Boys vs Girls(20)
			
https://pintia.cn/problem-sets/994805342720868352/problems/994805453203030016 This time you are aske ...
 - Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
			
资源可以用,但是安装完成后启动会报错:“要继续使用此程序,您必须应用最新的更新或使用新版本” 解决办法先修改你电脑时间为前一年(2017 1月),然后就可以打开xshell了,打开后"工具& ...
 - 解决hadoop 集群启动常见错误办法
			
hadoop 集群常见错误解决办法 hadoop 集群常见错误解决办法: (一)启动Hadoop集群时易出现的错误: 1. 错误现象:Java.NET.NoRouteToHostException ...
 - Android中常见的坑有哪些?
			
对于安卓开发入门级程序猿而言,由于不熟悉代码.工具等等,掉进一些坑中是难免的,今天小编在网上看到一位大神总结的Android开发中比较常见的坑及其原因和解决办法,赶脚还不错,分享出来,给大家提个醒. ...
 - 【题解】JLOI2015战争调度
			
搜索+状压+DP. 注意到一个性质:考虑一棵以x为根的子树,在x到原树的根的路径上的点如果都已经确定了方案,那么x的左右儿子的决策就彼此独立,互不影响了.所以我们考虑状压一条路径上每一层节点的状态,求 ...
 - git使用笔记(七)版本回退和撤销
			
By francis_hao Nov 21,2016 从版本库初始化开始,每一步的撤销操作 添加第一个文件 在空的版本库中创建了一个文件并git add到了缓存区,这时候怎么撤销呢? 撤销单个文 ...
 - Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)
			
D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...
 - ecplise中修改reviewboard密码
			
一.概述 如果想在ecplise中修改reviewboard密码,步骤请参考如下图片: